Selenium 简介
Selenium WebDriver 根据网页中页面元素拥有不同的标签名和属性值等特征来定位不同的元素,并完成对已定位到的页面元素的各种操作。
在自动化测试实施过程中,测试脚本中常用的页面元素操作步骤如下:
- 定位网页上的页面元素,获取元素对象。
- 通过获取的页面元素对象拥有的属性操作该页面元素。如单击、输入框输入等。
- 设定页面元素的操作值。如设定输入框中输入的内容或者下拉选项框选项等
find_element_by_* 和 find_elements_by_* 的区别:
- find_element_by_* 定位单个元素,找不到报错 NoSuchElementException
- find_elements_by_* 定位多个元素,返回列表;找不到元素,返回空列表
不要用可能会动态变化的属性来进行元素定位,注意事项:
- 不规则的字符串,比较长的
- 纯数字
- 带数字
使用 class_name 定位注意事项:属性值不要有空格,不然为报错。若存在空格,使用部分属性值来定位。
八大元素定位:
其中id、name、class_name、tag_name,源码实际都封装在 css_selector 中
注意事项:元素定位,得到的返回值是一个 WebElement 的 python 对象, 获取元素的属性需要用 get_attribute(‘name’),但是在 python 当中目前还不能直接修改元素属性, selenium 没有封装对应的方法,后期可以直接封装
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 元素定位,得到的返回值是一个 WebElement 的 python 对象 ==》 表示网页中要定位的元素。。
element = driver.find_element_by_id("kw")
print(element) # 返回一个 对象
# 获取元素的属性 ==》 WebElement() 的属性, 注意事项:在 python 当中现在还不能直接修改元素属性,selenium 没有封装对应的方法。
print(element.get_attribute('id')) # ====》 kw
# 通过超链接文本定位
e = driver.find_element_by_link_text("新闻")
e.click()
# 通过超链接部分文本定位
e = driver.find_element_by_link_text("新")
e.click()
使用 XPath 进行定位有三种方式:
- 自己编写(推荐)
- 通过浏览器复制(不推荐)
- 使用插件(不推荐)
XPath 表示: 绝对路径 和相对路径
在自动化测试当中,会使用的是相对路径,不会用绝对路径
绝对路径:从根节点开始,一层层进入对应元素(麻烦、容易出错、维护代码成本高)
相对路径:在当前节点进行定位。
- 相对路径更加简洁;绝对路径冗余
- 相对路径更灵活,容错性更好;绝对路径容错性差
XPath 当中的函数:
contains 函数 包含:
class , 如果你在 XPath 表达式中,
text() 匹配某一部分
会有空格
XPath 定位方法:
- 绝对路径定位,以百度搜索框为例。从根节点一层层搜索需要被定位的页面元素,绝对路径起始于正斜杠 ( / ),每一步均被斜杠分割。该定位方法不建议使用,页面结构发生变化,代码维护成本过高。
XPath 定位表达式
/html/body/div/div/div/div/div/form/span/input[@name=“wd”]
Python 定位语句
query=driver.find_element_by_xpath(’/html/body/div/div/div/div/div/form/span/input[@name=“wd”]’) - == 相对路径定位==:还是以百度搜索框为例。从当前节点集之中的节点来进行定位,起始于双证斜杠 ( // )。
XPath 定位表达式
//input[@name=“wd”] 或者 //[@name=“wd”] 或者 //input[@name=“wd” and @id=“kw”]
//表示从所有标签名中找到 name 属性等于 wd;多个组合属性用 and
Python 定位语句
query=driver.find_element_by_xpath(’//input[@name=“wd”]’) - 通过索引定位元素: 以百度搜索框为例。索引从 1 开始。(*******)
XPath 定位表达式
(//input)[1] 加扩号提高优先级 - 通过页面元素的属性值来定位元素:以百度首页新闻链接、搜索框为例。推荐使用相对路径结合属性的定位方式来编写 XPath 定位表达式,可以解决 99% 的页面元素定位难题。
XPath 定位表达式
//a[@href=“http://news.baidu.com”] 使用a标签定位href属性值,定位新闻链接
XPath 定位表达式
//span[@id=“s_kw_wrap”]/input[@name=“wd”] 通过span标签定位到子节点的元素,搜索框为例 - 使用模糊属性值定位元素:还是百度搜索框为例。在自动化测试的过程中,会遇到页面元素属性值是动态生成的,通过此方法可以解决不部分难题。
XPath 定位表达式
//a[contains(text(), “新闻”)] 或 //a[contains(@href, “http://news.baidu.com”)] - XPath 轴定位元素:
未完待续。。。。。。。。。。。。