zoukankan      html  css  js  c++  java
  • WebDriver API——元素定位

    一、前言

    把虫师的书看的差不多了,想直接开始项目实践,但好像有点操之过急了,还是一步一步来吧。WebDriver API是可以用来操作浏览器元素的一些类和方法,它提供了8种元素定位方法。下面将分别介绍下,本来想用公司网站做实践演练的,但考虑到公司对安全过于看重,就用百度来做演练了。

    二、id定位

    find_element_by_id()方法是通过id来定位元素的

    find_element_by_id("kw") # 通过id定位百度输入框

    三、name定位

    find_element_by_name()方法是通过name来定位元素的

    find_element_by_name("wd") # 通过name定位百度输入框

    四、class定位

    find_element_by_class_name()方法是通过class来定位元素的

    find_element_by_class_name("s_ipt") # 通过class定位百度输入框

    五、tag定位 

    find_element_by_tag_name()方法是通过元素的标签名来定位元素的。用标签识别单个元素的概率很低,比如<input>用来定义输入框,<a>标签用来定义超链接等。

    find_element_by_tag_name("input") # 通过标签名(tag name)定位百度输入框

    六、link定位 

    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定位

    1、绝对路径定位

    不多扯了,这种不推荐,就是直接用工具生成绝对路径

    2、利用元素属性定位 

    find_element_by_xpath("//input[@id='kw']") # //input表示当前页面某个input标签,[@id='kw']表示这个元素的id值是kw
    find_element_by_xpath("//*[@name='wd']") # 不指定标签名,可以直接用*号代替,这里通过name定位 
    find_element_by_xpath("//*[@class='s_ipt']") # 通过class定位
    find_element_by_xpath("//input[@autocomplete='off']") # xpath很强大,元素的任意属性值都可以用,只要它能唯一标识一个元素

    3、层级与属性结合

    如果元素本身没有可以唯一标识这个元素的属性值,但它的上一级元素有可以唯一标识属性的值,那就可以查找其上一级元素

    find_element_by_xpath("//span[@class='bg s_ipt_wr']/input") # span[@class='bg s_ipt_wr']通过class定位到父元素,后面的/input表示父元素下面的子元素

    如果父元素没有可以找的属性值,那可以继续向上找父元素的父元素

    find_element_by_xpath("//form[@id='form']/span[2]/input")

    4、使用逻辑运算符

    find_element_by_xpath("//input[@id='kw' and @class='s_ipt']") # 适用于一个属性不能唯一区分一个元素的情况,and表示必须满足两个条件来定位元素

    5、使用contains方法

    contains方法用于匹配一个属性中包含的字符串。例如span标签的class属性为“bg s_ipt_wr”

    find_element_by_xpath("//span[contains(@class,'s_ipt_wr')]/input")

    6、使用text()方法

    text()用于匹配显示文本信息

    find_element_by_xpath("//a[text(),'新闻']")
    find_element_by_xpath("//a[contains(text(),'非常')]") # contains和text()配合使用

    九、CSS定位

    css定位速度比xpath快,通过find_element_by_css_selector()方法用于在CSS中定位元素,xpath和css都提供了强大灵活的定位方法,相对而言,css语法更简洁,但理解和使用的难度要大一点

    find_element_by_css_selector(".s_ipt") # .表示通过class定位
    find_element_by_css_selector("#kw") # #表示通过id定位
    find_element_by_css_selector("input") # 用标签名定位不需要任何符号标识,直接使用标签名
    find_element_by_css_selector("span > input") # 通过标签层级关系定位,span表示父元素,查看span中所有标签名为input的子元素
    find_element_by_css_selector("[autocomplete=off]") # 通过属性定位
    find_element_by_css_selector("form.fm > span > input.s_ipt") # 组合定位,加强定位元素的唯一性
    find_element_by_css_selector("[class*=s_ipt_wr]") # 查找class属性包含此字符串的元素
    find_element_by_css_selector("[class^=bg]") # 查找class属性以此字符串开头的元素
    find_element_by_css_selector("[class$=wrap]") # 查找class属性以此字符串结尾的元素
    find_element_by_css_selector("form > input:nth-child(2)") # 查找form标签下面第2个Input标签的元素
    

      

  • 相关阅读:
    Linux
    Other
    Linux
    VIM
    Linux
    其他
    Win10
    Win10
    IDE
    其他
  • 原文地址:https://www.cnblogs.com/Chilam007/p/14730252.html
Copyright © 2011-2022 走看看