webDriver定位元素

一、八大定位方法

webdriver提供了8种元素定位的方法,在python中,对应的方法如下:

  • id定位   -->  find_element_by_id()
  • name定位  -->  find_element_by_name()
  • tag定位  -->  find_element_by_tag_name()
  • class定位 -->  find_element_by_class_name()
  • link_text -->  find_element_by_link_text()
  • partial link定位  -->  find_element_by_partial_link_text()
  • XPATH定位  -->  find_element_by_xpath()
  • CSS_selector定位  -->  find_element_by_css_selector()

 

二、页面元素、标签

以百度首页搜索框代码为例

   2.1 id定位

  HTML归档,id必须是惟一的。(身份证)

  输入框:

  find_element_by_id("kw")

  百度搜索按钮

  find_element_by_id("su")

 

  2.2 name定位

  HTML规定,name用来指导元素名称。(姓名)

  输入框:

  find_element_by_name("wd")

 

  2.3 class定位

  HTML规定,class用来指定元素类名。(身份证、姓名)

  输入框:

  find_element_by_class_name("s_ipt")

  百度搜索按钮

  find_element_by_class_name("btn self-btn bg s_btn")

  

  2.4 tag定位

  HTML通过tag来定义不同页面的元素。一般通过tag_name来定位。

  输入框:

  find_element_by_tag_name("input")

  百度搜索按钮

  find_element_by_tag_name("input")

  

  2.5 link定位

  link专门用来定位文本链接。通过元素标签直接的文字信息来定位元素。

  find_element_by_link_text("新闻")

  find_element_by_link_text("贴吧")

 

  2.6 partial link定位

  partial link定位是对link定位的一种补充,有些文字链接比较长,这个时候我们可以取文字链接的部分文字进行定位,只要这部分文字可以唯一地标识这个链接。

  find_element_by_partial_link_text("部分文字")

 

  2.7 XPath定位

  在XML文档中,XPath是一种定位元素的语言。而HTML作为XML的一种实现,所以webDriver提供了这种在web应用中的定位元素方法。

  1、绝对路径定位

  XPath有多种定位策略,最简单直观的就是写出元素的绝对路径。(人一定存在于一个地理位置)

  输入框:

  find_element_by_xpath("html/body/div/div[2]/div/div/div/from/span/input")

  百度搜索:

  find_element_by_xpath("html/body/div/div[2]/div/div/div/from/span[2]/input")

 

  div[2]、span[2] 标签出现的顺序。

 

  2、利用元素属性定位

  通过标签来定位,//input 表示当前页面的某个input标签,[@id='kw'] 表示这个元素的id值是kw。

  输入框:

  find_element_by_xpath("//input[@id='kw']")

  百度搜索:

  find_element_by_xpath("//input[@id='su']")

  

  通过name 和 class来定位,如果不想指定标签名,可以使用星号(*)代替。

  输入框:

  find_element_by_xpath("//*[@name='wd']")

  find_element_by_xpath("//input[@class='s_ipt']")

 

  XPath不局限与id、name和class,元素的任意属性都可以使用,只要它能唯一标识一个元素。

  输入框:

  find_element_by_xpath("//input[@maxlength='100']")

  find_element_by_xpath("//*[@autocomplete='off']")

  

  3、层级与属性结合

  如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以查找其上一级元素。如果它的上一级元素有可以唯一标识属性的值,就可以拿来使用。(根据父亲找到儿子)

  输入框:

  find_element_by_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input")

  

  span[@class='bg s_ipt_wr quickdelete-wrap'] 通过class定位到父元素。如果父元素没有可利用的属性,可以继续往上找。

 

  4、使用逻辑运算符

  如果一个属性不能唯一区分一个元素,那么我们可以使用逻辑运算符(and)来连接定位。

  输入框:

  find_element_by_xpath("//*[@id='kw' and @name='wd']")

 

  5、使用 contains 方法

  contains方法用于匹配一个属性中包含的字符串。

  输入框:

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

 

  6、使用 text() 方法

  text() 方法用于匹配显示文本信息。contains可以与text() 配合使用。

  新闻:

  find_element_by_xpath("//*[contains(text(), '新')]")

 

  2.8 CSS定位

  CSS是一种语言,用来描述HTML和XML文档的表现。CSS使用选择器未页面元素绑定属性。

  CSS选择器的常见语法如下:

  

 

 

 

  1、通过class定位

  点号(.)表示通过class来定位元素

  输入框:

  find_element_by_css_selector(".s_ipt")

  百度搜索:

  find_element_by_css_selector(".s_btn")

  

  2、通过id定位

  井号(#)表示通过id来定位元素

  输入框:

  find_element_by_css_selector("#kw")

  百度搜索:

  find_element_by_css_selector("#su")

 

  3、通过标签名定位

  在CSS中,可以直接使用标签名定位元素。

  输入框:

  find_element_by_css_selector("input")

 

  4、通过标签层级关系定位

  在父标签中查找子标签。

  输入框:

  find_element_css_selector("span>input")

 

  5、通过属性定位

  在CSS中可以使用唯一标识属性定位元素。对属性值来说,引号可加、可不加。注意和整个字符串的引号进行区分。

  输入框:

  find_element_css_selector("[name='kw']")

  find_element_css_selector("[autocomplete=off]")

 

  6、组合定位

  组合定位加强唯一性。

  输入框:

  find_element_by_css_selector("[form.fm>span>input.s_ipt]")

  

  7、更多定位用法

  查找class属性包含“s_ipt_wr”字符串的元素

  find_element_by_css_selector("[class*=s_ipt_wr]")

  查找class属性以“bg”字符串开头的元素

  find_element_by_css_selector("[class^=bg]")

  查找class属性以“wrap”字符串结尾的元素

  find_element_by_css_selector("[class$=wrap]")

  查找form标签下面第2个input标签的元素

  find_element_by_css_selector("form > input:nth-child(2)")

 

  更多方法参考w3school

  

posted @ 2021-03-15 18:12  这不好呐吧  阅读(137)  评论(0)    收藏  举报