1.元素定位

一、注意事项

find_element_by:只返回一个元素,找不到元素则报错

find_elements_by:返回匹配到的所有元素,当没有找到元素时不会报错,而是返回空列表[ ]

元素定位优先级: ID>name>css selector>xpath

在项目中我们可能用的最多的是css或者xpath,那么针对这两种,我们优先选择css,原因在哪些?

原因1:css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀

原因2:语言简洁,明了,相对xpath

原因3:前端开发主要是使用css,不使用xpath,所以在技术上面,我们可以获得帮助的机会非常多

定位元素注意事项:

找到待定位元素的唯一属性

如果该元素没有唯一属性,则先找到能被唯一定位到的父元素/子元素/相邻元素,再使用> , " " , +等进行辅助定位

不要使用随机唯一属性定位

最重要的是多跟研发沟通,尽量把关键元素加上ID或者name,并减少不合理的页面元素,例如重复ID这样的事情最好不要发生

二、元素定位方法

1.id定位:find_element_by_id("id")

2.class定位:find_element_by_class_name("class")

3.name定位:find_element_by_name("name")

4.tag定位:find_element_by_tag_name("div")

5.link定位:find_element_by_link_text("新闻")

6.partial link定位:find_element_by_partial_link_text("一个很长的")

7.xpath定位:绝对路径定位、利用元素属性定位、层级与属性结合、使用逻辑运算符

 (1)绝对路径定位:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")

        find_element_by_xpath()方法使用XPath语言来定位元素。XPath主要用标签名的层级关系来定位元素的绝对路径,最外层为html语言。在body文本内,一级一级往下查找,如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个,例如,div[2]表示当前层级下的第二个div标签。

 (2)利用元素属性定位:find_element_by_xpath("//*[@id='kw']")  #注意外层 " 符号和内层 ' 符号

        //表示当前页面某个目录下,input 表示定位元素的标签名,[@id="kw"]表示这个元素的 id 属性值等于kw。下面通过name和class属性值来定位。浏览器开发者工具F12,复制,XPath

  (3)层级与属性结合:find_element_by_xpath('//[@id="cnblogs_post_body"]/p[1]/a[1]')

       如果一个元素本身没有可以唯一标识这个元素的属性值,name我们可以找其上一级元素,如果它的上一级元素有可以唯一标识属性的值。也可以拿来使用。

   (4)使用逻辑运算符:find_element_by_xpath('//input[@id="kw"and @class="su"]/span/input')

8.Css定位:

    (1) 通过 class 属性定位:find_element_by_css_selector(".s_ipt")

    (2) 通过 id 属性定位:find_element_by_css_selector("#kw")

    (3) 通过标签名定位:find_element_by_css_selector("input")

    (3.1)通过父子关系定位:find_element_by_css_selector("span>input")

    (3.2)通过属性定位:find_element_by_css_selector("[autocomplete=off]")

    (3.3)组合定位:find_element_by_css_selector("span.bgs_btn_wr>input#su")

9.用By定位:

针对前面介绍的 8 种定位方法,WebDriver 还提供了另外一套写法,即统一调用 find_element()方法,通过 By 来声明定位的方法,并且传入对应定位方法的定位参数,具体如下:

    find_element(By.ID,"kw")

    find_element(By.NAME,"wd")

    find_element(By.CLASS_NAME,"s_ipt")

    find_element(By.TAG_NAME,"input")

    find_element(By.LINK_TEXT,"登陆")

    find_element(By.PARTIAL_LINK_TEXT,"登")

    find_element(By.XPATH,"//*[@class='bgs_btn']")

    find_element(By.CSS_SELECTOR,"span.bgs_btn_wr>input#su")

你可能感兴趣的:(1.元素定位)