WebDriver API
WebDriver API
从元素开始定位
页面有输入框、 按钮、 文字连接、 图片等元素, 自动化测试就是模拟鼠标、 键盘来操作这些元素, 如 单击、 输入、 鼠标悬停 等
而操作这些元素首先要定位他们
页面元素都是由 HTML 代码构成,他们之间有层级地组织起来,每个元素都有不同的标签名和属性值,
WebDriver 提供了 8 种元素定位方法,在 Python 中,对应的方法如下:
WebDriver 还提供了统一调用 find_element() 方法, 通过 By 来声明定位,并且传入对应定位方法的定位参数
id 定位 find_element_by_id() find_element(By.ID, "kw")
name 定位 find_element_by_name() find_element(By.NAME, "wd")
tag 定位 find_element_by_tag_name() find_element(By.TAG_NAME, "s_ipt")
class 定位 find_element_by_class_name() find_element(By.CLASS_NAME, "input")
link_text find_element_by_link_text() find_element(By.LINK_TEXT, "新闻")
partial link 定位 find_element_by_partial_link_text() find_element(By.PARTIAL_LINK_TEXT, "新")
XPath 定位 find_element_by_xpath() find_element(By.XPATH, "//*[@class='bg s_btn'")
CSS_selector 定位 find_element_by_css_selector() find_element(By.CSS_SELECTOR, "span.bg s_btn_wr > input#su")
id 定位
HTML 规定, id 在 HTML 文档中必须是唯一的
find_element_by_id("kw")
find_element_by_id("su")
name 定位
HTML 规定,name 用来指定元素的名称,因此它的作用更像人的姓名。
find_element_by_name("wd")
class 定位
HTML 规定,class 用来指定元素的类名,其用法与 id、 name 类似。
find_element_by_class_name("s_ipt")
tag 定位
HTML 通过 tag 来定义不同页面的元素。 例如, <input> 一般用来定义输入框 <a> 定义超链接
find_element_by_tag_name("input")
link 定位
link 与前面几种方法有所不同,他专门定位文本链接, 通过元素标签对之间的文字信息来定位元素
find_element_by_link_text("新闻")
partial link 定位
partial link 是对 link 的一种补充,有些文字链接比较长,这时候我们可以取链接文字的一部分进行定位
find_element_by_partial_link("一个很长的")
XPath 定位
在 XML 中,XPath 是一种定位元素的语言。 因为 HTML 可以看做是 XML 的一种实现,所以 WebDriver 提供了这种在 Web 应用中定位元素的方法。
1. 绝对路径定位
find_element_by_xpath("/html/body/div[2]/div/form/span/input")
2. 元素属性定位
find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//input[@id='su']")
如果不想指定标签名,可以用型号(*)代替。 当然 XPath 不限于 id,name,class 这些属性,元素的任意属性都可以使用。
find_element_by_xpath("//*[@name='wd'")
find_element_by_xpath("//input[@maxlength='100']")
3. 层级与属性结合
find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")
find_element_by_xpath("//form[@id='form']/span/input")
4. 使用逻辑运算符
find_element_by_xpath("//span[@id='kw' and @class='s_ipt']")
5. 使用 contains() 方法
find_element_by_xpath("//span[contains(@class, 's_ipt_wr']/input")
6. 使用 text() 方法
text() 方法用于匹配显示文本信息
find_element_by_xpath("//a[text(), '新闻']")
text() 方法和 contain() 方法配合使用
find_element_by_xpath("//a[contains(text(), '一个很长的']")
CSS 定位
CSS 是一种语言,用来描述 HTML 和 XML 文档的表现,CSS 使用选择器为页面元素绑定属性。 CSS 选择器可以较为灵活地选择控件的任意属性,一般情况下,
CSS 定位速度比 XPath 定位速度快。
1. 通过 class 定位
find_element_by_css_selector(".s_ipt")
find_element_by_css_selector(".s_btn")
2. 通过 id 定位
find_element_by_css_selector("#kw")
3. 通过标签名定位
find_element_by_css_selector("input")
4. 通过标签层级关系定位
find_element_by_css_selector("span > input")
5. 通过属性定位
find_element_by_css_selector("[autocomplete=off]")
6. 组合定位
find_element_by_css_selector("form.fm > span > input.s_ipt")
find_element_by_css_selector("form#form > span > input#kw")
7. 更多定位方法
find_element_by_css_selector("[class*=s_ipt_wr]") 查找 class 属性包含 "s_ipt_wr" 的
find_element_by_css_selector("[class^=bg]") 查找 class 属性以 "bg" 开头的
find_element_by_css_selector("[class$=wrap]") 查找 class 属性以 "wrap" 结尾的
find_element_by_css_selector("form > input:nth-child[2]") 查找 form 标签下 第二个 input 元素
浙公网安备 33010602011771号