Selenium提供了8种定位方式。css
idhtml
nameweb
class name浏览器
tag namecookie
link text函数
partial link text测试
xpathui
css selectorurl
这8种定位方式在Python selenium中所对应的方法为:spa
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
driver.set_window_size(480,800)
driver.refresh() #刷新当前页面
clear(): 清除文本。
send_keys (value): 模拟按键输入。
click(): 单击元素。
submit()
submit()方法用于提交表单。 例如, 在搜索框输入关键字以后的“回车” 操做, 就能够经过该方法模拟。
size: 返回元素的尺寸。
text: 获取元素的文本。
get_attribute(name): 得到属性值。
is_displayed(): 设置该元素是否用户可见。
输出结果:
执行上面的程序并查看结果: size 方法用于获取百度输入框的宽、 高, text 方法用于得到百度底部的备案信息, get_attribute()用于得到百度输入的 type 属性的值, is_displayed()用于返回一个元素是否可见, 若是可见则返回 True, 不然返回 False。
在 WebDriver 中, 将这些关于鼠标操做的方法封装在 ActionChains 类提供。
ActionChains 类提供了鼠标操做的经常使用方法:
perform(): 执行全部 ActionChains 中存储的行为;
context_click(): 右击;
double_click(): 双击;
drag_and_drop(): 拖动;
move_to_element(): 鼠标悬停。
from selenium.webdriver import ActionChains
导入提供鼠标操做的 ActionChains 类。
ActionChains(driver)
调用 ActionChains()类, 将浏览器驱动 driver 做为参数传入。
move_to_element(above)
context_click()方法用于模拟鼠标右键操做, 在调用时须要指定元素定位。
perform()
执行全部 ActionChains 中存储的行为, 能够理解成是对整个操做的提交动做。
Keys()类提供了键盘上几乎全部按键的方法。 前面了解到, send_keys()方法能够用来模拟键盘输入, 除此 以外, 咱们还能够用它来输入键盘上的按键, 甚至是组合键, 如 Ctrl+A、 Ctrl+C 等。
须要说明的是, 上面的脚本没有什么实际意义, 仅向咱们展现模拟键盘各类按键与组合键的用法。
在使用键盘按键方法前须要先导入 keys 类。
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12
不论是在作功能测试仍是自动化测试,最后一步须要拿实际结果与预期进行比较。这个比较的称之为断言。
咱们一般能够经过获取title 、URL和text等信息进行断言。text方法在前面已经讲过,它用于获取标签对之间的文本信息。 下面一样以百度为例,介绍如何获取这些信息。
脚本运行结果以下:
WebDriver提供了两种类型的等待:显式等待和隐式等待。
显式等待使WebdDriver等待某个条件成立时继续执行,不然在达到最大时长时抛出超时异常(TimeoutException)。
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,若是超过设置时间检测不到则抛出异常。具体格式以下:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
WebDriverWait()通常由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。 * until(method, message=‘’) 调用该方法提供的驱动程序做为一个参数,直到返回值为True。 * until_not(method, message=‘’) 调用该方法提供的驱动程序做为一个参数,直到返回值为False。
在本例中,经过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。
WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0。它的用法相对来讲要简单得多。
implicitly_wait()默认参数的单位为秒,本例中设置等待时长为10秒。首先这10秒并不是一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,若是元素能够定位,则继续执行;若是元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)尚未定位到元素,则抛出异常。
WebDriver还提供了8种用于定位一组元素的方法。
定位一组元素的方法与定位单个元素的方法相似,惟一的区别是在单词element后面多了一个s表示复数。
接下来经过例子演示定位一组元素的使用:
程序运行结果:
在Web应用中常常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素没法直接定位。这时就须要经过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。
126邮箱登陆框的结构大概是这样子的,想要操做登陆框必需要先切换到iframe表单。
switch_to.frame() 默承认以直接取表单的id 或name属性。若是iframe没有可用的id和name属性,则能够经过下面的方式进行定位。
除此以外,在进入多级表单的状况下,还能够经过switch_to.default_content()跳回最外层的页面。
在页面操做过程当中有时候点击某个连接会弹出新的窗口,这时就须要主机切换到新打开的窗口上进行操做。WebDriver提供了switch_to.window()方法,能够实如今不一样的窗口之间切换。 以百度首页和百度注册页为例,在两个窗口之间的切换.
在本例中所涉及的新方法以下:
在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体作法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,而后使用text/accept/dismiss/ send_keys等方法进行操做。
text:返回 alert/confirm/prompt 中的文字信息。
accept():接受现有警告框。
dismiss():解散现有警告框。
send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。
经过switch_to_alert()方法获取当前页面上的警告框,并使用accept()方法接受警告框。
有时咱们会碰到下拉框,WebDriver提供了Select类来处理下拉框。
Select类用于定位select标签。 select_by_value() 方法用于定位下接选项中的value值。
对于经过input标签实现的上传功能,能够将其看做是一个输入框,即经过send_keys()指定本地文件路径的方式实现文件上传。
建立upfile.html文件,代码以下:
经过浏览器打开upfile.html文件,功能以下图。
接下来经过send_keys()方法来实现文件上传。
有时候咱们须要验证浏览器中cookie是否正确,由于基于真实cookie的测试是没法经过白盒和集成测试进行的。WebDriver提供了操做Cookie的相关方法,能够读取、添加和删除cookie信息。
WebDriver操做cookie的方法:
get_cookies(): 得到全部cookie信息。
get_cookie(name): 返回字典的key为“name”的cookie信息。
add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。
delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”。
delete_all_cookies(): 删除全部cookie信息。
下面经过get_cookies()来获取当前浏览器的cookie信息。
从执行结果能够看出,cookie数据是以字典的形式进行存放的。知道了cookie的存放形式,接下来咱们就能够按照这种形式向浏览器中写入cookie信息。
从执行结果能够看到,最后一条cookie信息是在脚本执行过程当中经过add_cookie()方法添加的。经过遍历获得全部的cookie信息,从而找到key为“name”和“value”的特定cookie的value。
虽然WebDriver提供了操做浏览器的前进和后退方法,但对于浏览器滚动条并无提供相应的操做方法。在这种状况下,就能够借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。
用于调整浏览器滚动条位置的JavaScript代码以下:
window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。其代码以下:
经过浏览器打开百度进行搜索,而且提早经过set_window_size()方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。而后经过execute_script()方法执行JavaScripts代码来移动滚动条的位置。
自动化用例是由程序去执行的,所以有时候打印的错误信息并不十分明确。若是在脚本执行出错的时候能对当前窗口截图保存,那么经过图片就能够很是直观地看出出错的缘由。WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。
脚本运行完成后打开D盘,就能够找到baidu_img.jpg图片文件了。
在前面的例子中咱们一直使用quit()方法,其含义为退出相关的驱动程序和关闭全部窗口。除此以外,WebDriver还提供了close()方法,用来关闭当前窗口。例多窗口的处理,在用例执行的过程当中打开了多个窗口,咱们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。
close() 关闭单个窗口
quit() 关闭全部窗口