评论

收藏

[JavaScript] webdriver常用的API翻译与解析

开发技术 开发技术 发布于:2021-06-24 09:46 | 阅读数:213 | 评论:0

WebDriver是相当强大的,利用它几乎能模拟实现浏览器的一切操作行为。当然,它的功能虽强大,有时候操作却很不方便(我真的没有特指frame的切换问题)。下面我就介绍一下WebDriver一些常见的API。
WebDriver英文原版API传送门:http://selenium-python.readthedocs.org/en/latest/api.htmlWebdriver初接触


要使用Webdriver,首先要把它导入进来。推荐的导入方式是:
from selenium import webdriver
然后把浏览器句柄赋给一个对象:
driver= webdriver.Chrome()
利用driver对象来调用下面的APIWebdriverAPI(按照首字母排序)

add_cookie(cookie_dict)

添加一个cookie到当前的会话。
l参数:
cookie_dict:字典对象,必要的keys有“name”和“value”,可选的keys有path”, “domain”,“secure”, “expiry”
l使用示例:
driver.add_cookie({"name" : "foo", "value" : "bar"})
driver.add_cookie({"name" : "foo", "value" : "bar", "path" : "/"})
driver.add_cookie({"name" : "foo", "value" : "bar", "path" : "/", "secure":True})

back()

控制浏览器后退
l使用示例:
driver.back()

close()

关闭当前窗口
l使用示例:
driver.close()

create_web_element(element_id)

创建一个具有特定element_id的web对象(有用吗?)delete_all_cookies()

删除会话范围内所有的cookies
l使用示例:
driver.delete_all_cookies()
delete_cookie(name)

删除会话中指定名称为内name的cookie
l使用示例:
driver.delete_cookie("my_cookie")
execute(driver_command,params=None)

发送一个由command.CommandExecutor执行的命令
l参数:
driver_command:命令的名称,string类型
params:命令的参数,dictionary对象,可包括多个参数
l返回值:命令执行完毕的JSON响应,加载到一个dictionary对象
l使用示例:其实很多Webdriver的API都是基于这个函数封装的,如通用查找函数find_element的定义如下:
def find_element(self,by=By.ID, value=None):
if isinstance(by, tuple) or isinstance(value, int)or value==None:
raise InvalidSelectorException("Invalid locatorvalues passed in")
returnself.execute(Command.FIND_ELEMENT,
               {"using": by, "value": value})["value"]</pre><p style="text-indent:0;"><br /><p style="text-indent:32px;"><span style="font-family:'微软雅黑', sans-serif;">最后一句话执行了</span>FIND_ELEMENT<span style="font-family:'微软雅黑', sans-serif;">命令,参数是</span>using(by)<span style="font-family:'微软雅黑', sans-serif;">和</span>value(value)<span style="font-family:'微软雅黑', sans-serif;">,返回了</span>dictionary<span style="font-family:'微软雅黑', sans-serif;">类型的</span><span style="font-family:'微软雅黑', sans-serif;">命令执行结果,并取其中的</span>value<span style="font-family:'微软雅黑', sans-serif;">。</span><h3><span style="background-color:#d9d9d9;">execute_async_script(<em>script</em>,<em>*args</em>)</span></h3><p style="text-indent:32px;"><span style="font-family:'微软雅黑', sans-serif;">在当前窗口或框架中,异步执行</span>javascript<span style="font-family:'微软雅黑', sans-serif;">脚本(可以边操作边执行)</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">参数</span>:</strong><p style="text-indent:0;margin-left:60px;"><span style="background-color:#d9d9d9;">script</span><span style="background-color:#d9d9d9;">:</span><span style="font-family:'微软雅黑', sans-serif;">待执行的</span>javascript<span style="font-family:'微软雅黑', sans-serif;">脚本</span><p style="text-indent:0;margin-left:60px;"><span style="background-color:#d9d9d9;">params:</span><span style="font-family:'微软雅黑', sans-serif;">任何</span><span style="font-family:'微软雅黑', sans-serif;">用于上述</span>javascript<span style="font-family:'微软雅黑', sans-serif;">的参数(很霸气有木有)</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">返回值</span>:</strong><span style="font-family:'微软雅黑', sans-serif;">无</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">使用示例</span>:</strong><pre class="brush:python;toolbar:false;">driver.execute_async_script("document.title")</pre><h3><span style="background-color:#d9d9d9;">execute_script(<em>script</em>,<em>*args</em>)</span></h3><p style="text-indent:32px;"><span style="font-family:'微软雅黑', sans-serif;">在当前窗口或框架中,同步执行</span>javascript<span style="font-family:'微软雅黑', sans-serif;">脚本</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">参数</span>:</strong><p style="text-indent:0;margin-left:60px;"><span style="background-color:#d9d9d9;">script</span><span style="background-color:#d9d9d9;">:</span><span style="font-family:'微软雅黑', sans-serif;">待执行的</span>javascript<span style="font-family:'微软雅黑', sans-serif;">脚本</span><p style="text-indent:0;margin-left:60px;"><span style="background-color:#d9d9d9;">params:</span><span style="font-family:'微软雅黑', sans-serif;">任何</span><span style="font-family:'微软雅黑', sans-serif;">用于上述</span>javascript<span style="font-family:'微软雅黑', sans-serif;">的参数</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">返回值</span>:</strong><span style="font-family:'微软雅黑', sans-serif;">无</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">使用示例</span>:</strong><pre class="brush:python;toolbar:false;">driver.execute_script("document.title")</pre><h3><span style="background-color:#d9d9d9;">find_element</span><span style="background-color:#d9d9d9;">(<em>by</em>,<em>value</em>)</span></h3><p style="text-indent:32px;"><span style="font-family:'微软雅黑', sans-serif;">查找元素,可适应所有的查找方式,</span> find_element_by_*<span style="font-family:'微软雅黑', sans-serif;">函数就是调用它来实现的。</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">参数</span>:</strong><p style="text-indent:0;margin-left:60px;"><span style="background-color:#d9d9d9;">by</span><span style="background-color:#d9d9d9;">:</span><span style="font-family:'微软雅黑', sans-serif;">查找元素的方法,包括</span>id<span style="font-family:'微软雅黑', sans-serif;">、</span>name<span style="font-family:'微软雅黑', sans-serif;">、</span>link text<span style="font-family:'微软雅黑', sans-serif;">、</span>xpath<span style="font-family:'微软雅黑', sans-serif;">、</span>class name…<p style="text-indent:0;margin-left:60px;"><span style="background-color:#d9d9d9;">value:</span><span style="font-family:'微软雅黑', sans-serif;">需要查找的内容</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">返回值</span>:</strong><span style="font-family:'微软雅黑', sans-serif;">找到就返回元素的对象</span>;<span style="font-family:'微软雅黑', sans-serif;">找不到的话抛出异常</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">使用示例</span>:</strong><pre class="brush:python;toolbar:false;">driver.find_element("name","element_name")#注意两个参数都要加引号</pre><p style="text-indent:32px;"><span style="font-family:'微软雅黑', sans-serif;"></span><br /><h3><span style="background-color:#d9d9d9;">find_element_by_*(<em>args</em>)</span></h3><p style="text-indent:32px;"><span style="font-family:'微软雅黑', sans-serif;">包括一批查找元素的方法,它们比较类似,所以一起写了。包括</span>id<span style="font-family:'微软雅黑', sans-serif;">、</span>name<span style="font-family:'微软雅黑', sans-serif;">、</span>class_name<span style="font-family:'微软雅黑', sans-serif;">、</span>css_selector<span style="font-family:'微软雅黑', sans-serif;">、</span>link_text<span style="font-family:'微软雅黑', sans-serif;">、</span>partial_link_text<span style="font-family:'微软雅黑', sans-serif;">、</span>xpath<span style="font-family:'微软雅黑', sans-serif;">,以后将在如何查找页面元素的博文里详细讲解</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">参数</span>:</strong><p style="text-indent:0;margin-left:60px;"><span style="background-color:#d9d9d9;">args</span><span style="background-color:#d9d9d9;">:</span><span style="font-family:'微软雅黑', sans-serif;">待查找的内容</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">返回值</span>:</strong><span style="font-family:'微软雅黑', sans-serif;">找到就返回元素的对象</span>;<span style="font-family:'微软雅黑', sans-serif;">找不到的话抛出异常</span><p style="margin-left:60px;"><span style="font-family:wingdings;">l</span><strong><span style="font-family:'微软雅黑', sans-serif;">使用示例</span>:</strong><pre class="brush:python;toolbar:false;">driver.find_element_by_class_name("foo")
  driver.find_element_by_css_selector("#foo")
  driver.find_element_by_id("foo")
  driver.find_element_by_link_text("Sign In")
  driver.find_element_by_name("foo")
  driver.find_element_by_partial_link_text("Sign")
  driver.find_elemdriver.find_element_by_tag_name("foo")

  driver.find_element_by_xpath("//div/td[1]")find_elements(by,value)

跟find_element函数类似,不同的是可查找多个匹配的元素
l参数:
by:查找元素的方法,包括id、name、link text、xpath、class name…
value:需要查找的内容
l返回值:返回所有匹配的元素对象,放在list中;找不到的话抛出异常
l使用示例:
driver.find_elements("name","element_name")
find_elements_by_(args)

不用我赘述了吧,结合find_element_by_
和find_elements就懂了foward()

控制浏览器前进
l使用示例:
driver.foward()
get(url)

在当前浏览器的中加载一个网页
l参数:
url:需要加载的网址(强烈建议使用完整的URL,否则会加载失败)
l使用示例:
driver.get("http://www.baidu.com")
get_cookie(name)

根据名称获取cookie
l返回值:
如果找到了就返回cookie;否则返回none
l使用示例:
driver.get_cookie("my_cookie")
get_cookies()

查找当前会话中所有的cookies
l返回值:
如果找到了就返回一个dictionaries对象,包含所有cookies
l使用示例:
driver.get_cookies()
get_window_position()

获取当前浏览器窗口的坐标,是根据浏览器左上角和屏幕左上角的相对位置计算的
l返回值:
一个包含x、y坐标的字典对象。
l使用示例:
print driver.get_window_position()
get_window_position(windowHandle="current")

获取当前浏览器窗口的坐标,是根据浏览器左上角和屏幕左上角的相对位置计算的
l参数:
windowHandle:默认是当前窗口,也可以指定一个窗口的句柄
l返回值:
一个包含x、y坐标的字典对象。
l使用示例:
print driver.get_window_position()
get_window_size(windowHandle="current")

获取当前浏览器窗口的高度和宽度
l参数:
windowHandle:默认是当前窗口,也可以指定一个窗口的句柄
l返回值:
一个包含width、height的字典对象。
l使用示例:
print driver.get_window_size()
implicitly_wait(time_to_wait)

设置一个超时时间,隐式地等待元素的查找和命令的执行。每次会话中,这个函数只需要被调用一次。如果要设置execute_async_script函数的超时时间,参阅set_script_timeout函数。
l参数:
time_to_wait:超时时间,以秒为单位
l使用示例:
driver.implicitly_wait(30)
is_online()

判断浏览器是否在线。(我把网络断开了,返回值还是TRUE,谁能告诉我是怎么回事)
l返回值:
在线返回True,不在线返回false
l使用示例:
print driver.is_online()
maximize_window()

浏览器窗口最大化
l使用示例:
driver.maximize_window()
quit()

退出,并且关闭所有相关的窗口
l使用示例:
driver.quit()
refresh()

刷新当前页面
l使用示例:
driver.refresh()
save_screenshot(filename)

获取当前浏览器窗口的截图
l参数:
filename:保存截图的文件名,使用完整路径
l返回值:
如果有任何IOError,返回false;否则返回true
l使用示例:
driver.save_screenshot("/Screenshots/foo.png")
driver.save_screenshot("D:/Screenshots/foo.png")
set_page_load_timeout(time_to_wait)

设置等待网页加载的时间,直到抛出错误
l参数:
time_to_wait:等待时间,以秒为单位
l使用示例:
driver.set_page_load_timeout(30)
set_script_timeout(time_to_wait)

设置等待execute_async_script函数执行javascript的时间,直到抛出错误
l参数:
time_to_wait:等待时间,以秒为单位
l使用示例:
driver.set_script_timeout(30)
set_window_position(x,y,windowHandle="current")

设置浏览器窗口的x、y坐标
l参数:
x:设置窗口位置的x坐标像素
y:设置窗口位置的y坐标像素
windowHandle:窗口的句柄,默认是当前窗口,也可以指定窗口
l使用示例:
driver.set_window_position(0,0)
set_window_size(width,height,windowHandle="current")

设置浏览器窗口的高度和宽度
l参数:
width:设置窗口位置的宽度像素值
height:设置窗口位置的高度像素值
windowHandle:窗口的句柄,默认是当前窗口,也可以指定窗口
l使用示例:
driver.set_window_size(800,600)
switch_to_active_element()

切换至焦点所在的元素,如果没有焦点,就切换至BODY
l使用示例:
driver.switch_to_active_element()
switch_to_alert()

把焦点切换至页面上的一个弹出框
l使用示例:
driver.switch_to_alert()
switch_to_default_content()

把焦点切换至默认的frame上
l使用示例:
driver.switch_to_default_content()
switch_to_frame(frame_reference)

把焦点切换至特定的frame中,可以根据id、name、webelement指定frame
l参数:
frame_reference:可以是frame的名称,也可以是frame的序号,也可以是一个iframe元素
l使用示例:
driver.switch_to_frame("frame_name")
driver.switch_to_frame(1)
driver.switch_to_frame(driver.find_elements_by_tag_name("iframe")[0])
switch_to_window(window_name)

把焦点切换至特定的窗口中
l参数:
window_name:可以是窗口的名称也可以是窗口的句柄
l使用示例:
driver.switch_to_window("main")
driver.switch_to_window(driver.window_handles[1])
Webdriver属性

application_cache

获取一个ApplicationCache对象,来跟浏览器缓存进行交互
l使用示例:
driver.application_cache
current_url

获取当前url
l使用示例:
driver.current_url
current_window_handle

获取当前窗口的句柄
l使用示例:
Main_window=driver.current_window_handle
name

获取当前运行实例的底层浏览器的名称
l使用示例:
print driver.name
Page_source

获取当前页面的源代码
l使用示例:
driver.page_source#要print的人请自重,网页较大时不是一般的卡
title

获取当前页面的标题
l使用示例:
Print driver.title
Window_handles

获取当前会话中所有的窗口句柄
l返回值:
一个list,包含所有窗口句柄
l使用示例:
Print driver.title






关注下面的标签,发现更多相似文章