Python+Selenium+WebDriverAPI元素定位

2019-04-16  本文已影响0人  gz_tester

元素定位

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

通过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语言》中的第四章第一部分。

上一篇下一篇

猜你喜欢

热点阅读