美文网首页
Python+Selenium+WebDriverAPI元素定位

Python+Selenium+WebDriverAPI元素定位

作者: gz_tester | 来源:发表于2019-04-16 10:15 被阅读0次

    元素定位

    webdriver提供了八中元素定位的方法,在Python语言中,对应的方法如下:

    1.id定位

    find_element_by_id()方法通过id属性定位元素

    2. name定位

    find_element_by_name()方法通过name属性定位元素

    3. class定位

    find_element_by_class_name()方法通过class属性定位元素

    4. tag定位

    htm的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。因为一个tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。例如我们打开任意一个页面,就会发现大量的<div>,<input>,<a>等tag,所以很难通过tag name去区分不同的元素
    find_element_by_tag_name()方法通过tag属性定位元素

    5. link定位

    find_element_by_link_text()方法通过元素标签对之间的文本信息来定位元素

    6. partial link 定位

    partial link 定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以选取文本链接的一部分定位,只要这一部分可以唯一的标识这个链接
    <a class="test" name="test" href="#">这是一个很长很长很长的文本链接</a>
    find_element_by_partial_link_text("一个很长很长的")方法通过元素标签对之间的部分文本信息来定位元素

    7. XPath定位

    绝对路径定位

    xpath绝对路径定位方法就是在html文本中,一级一级的往下找,如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个【从1开始计数】
    find_element_by_xpath("/html/body/div/div[2]/div/div/div/form/span[2]/input")
    有关计数的路径表达式,以及表达式的结果:

    image.png

    利用元素属性定位

    除了使用绝对路径之外,xpath也可以使用元素的属性值来定位。
    例如:
    find_element_by_xpath("//input[@id='kw']")
    find_element_by_xpath("//*[@class='kw']")
    find_element_by_xpath("//input[@name='kw']")
    find_element_by_xpath("//*[@type='submit']")

    含义解释如下图:


    image.png
    image.png

    层级与属性结合

    如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以找其上一级元素,如果它的上一级元素有可以唯一标识的属性值,也可以拿来使用。
    例如:
    find_element_by_xpath("//span@[type='submit']/input")

    使用逻辑运算符

    如果一个属性不能唯一地区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素
    例如:
    find_element_by_xpath("//span@[type='submit' and @class='su']/input/span[2]")
    下面列出了可用在 XPath 表达式中的运算符:

    image.png

    8. CSS定位

    CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明:


    image.png
    • 选择器通常是您需要改变样式的 HTML 元素。
    • 每条声明由一个属性和一个值组成。
    • 属性(property)是您希望设置的样式属性(style attribute)。每个属性有一个值。属性和值被冒号分开。
      css选择器的常见语法


      image.png

    通过class属性定位

    find_element_by_css_selector()方法用于css语言定位元素,点号"."表示通过class属性来定位元素
    例如:find_element_by_css_selector('.s_ip')

    通过id属性定位

    井号"#"表示通过id属性来定位元素
    例如:find_element_by_css_selector('#kw')

    标签名定位-通过父子关系定位

    例如:find_element_by_css_selector('span>input')
    上面的写法表示有父亲元素,它的标签名为span,查找它的所有子元素标签名=input的元素

    标签名定位-通过属性定位

    例如:find_element_by_css_selector('[name="kw"]')
    在css中也可以使用元素的任意属性,只要这些属性可以唯一标识这个元素。对于属性值来说,可以加引号,也可以不加。

    标签名定位-组合定位

    我们可以把上面的定位策略组合起来使用,这就大大加强了定位元素的唯一性
    例如:find_element_by_css_selector('form.fm>span>input#kw')

    该篇文章转自虫师的《Selenium2 自动化测试实践 基于Python语言》中的第四章第一部分。

    相关文章

      网友评论

          本文标题:Python+Selenium+WebDriverAPI元素定位

          本文链接:https://www.haomeiwen.com/subject/eqlpwqtx.html