selenium元素定位方法

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 等。

 

须要说明的是, 上面的脚本没有什么实际意义, 仅向咱们展现模拟键盘各类按键与组合键的用法。

  • from selenium.webdriver.common.keys import Keys

在使用键盘按键方法前须要先导入 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方法在前面已经讲过,它用于获取标签对之间的文本信息。 下面一样以百度为例,介绍如何获取这些信息。

 

脚本运行结果以下:

 

  • title:用于得到当前页面的标题。
  • current_url:用户得到当前页面的URL。
  • text:获取搜索条目的文本信息。

设置元素等待

WebDriver提供了两种类型的等待:显式等待隐式等待

显式等待

显式等待使WebdDriver等待某个条件成立时继续执行,不然在达到最大时长时抛出超时异常(TimeoutException)。

 

WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,若是超过设置时间检测不到则抛出异常。具体格式以下:

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

  • driver :浏览器驱动。
  • timeout :最长超时时间,默认以秒为单位。
  • poll_frequency :检测的间隔(步长)时间,默认为0.5S。
  • ignored_exceptions :超时后的异常信息,默认状况下抛    NoSuchElementException异常。

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()方法,能够实如今不一样的窗口之间切换。 以百度首页和百度注册页为例,在两个窗口之间的切换.

 

在本例中所涉及的新方法以下:

  • current_window_handle:得到当前窗口句柄。
  • window_handles:返回全部窗口的句柄到当前会话。
  • switch_to.window():用于切换到相应的窗口,与上一节的switch_to.frame()相似,前者用于不一样窗口的切换,后者用于不一样表单之间的切换。

警告框处理

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是否正确,由于基于真实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。

调用JavaScript代码

虽然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() 关闭全部窗口

相关文章
相关标签/搜索