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 元素

posted @ 2020-02-15 18:10  gupanpan  阅读(71)  评论(0)    收藏  举报