【selenium学习总结2】----元素定位方法

【selenium学习总结2】----元素定位方法,第1张

                                     《selenium元素定位方法 》

一、18种定位方式

9种单数形式+9种复数形式

使用单数形式会获取到唯一的元素,元素可以用来点击或进行其他 *** 作

使用复数形式进行定位则会返回一个列表,显示所有匹配的元素,因此不能进行点击等 *** 作,需要指定某一个元素后才能进行

find_element_by_id

find_elements_by_id

find_element_by_name

find_elements_by_name

find_element_by_class_name

find_elements_by_class_name

find_element_by_tag_name

find_elements_by_tag_name

find_element_by_link_text

find_elements_by_link_text

find_element_by_partial_link_text

find_elements_by_partial_link_text

find_element_by_xpath

find_elements_by_xpath

find_element_by_css_selector

find_elements_by_css_selector

find_element(self ,by='id',value=none)

find_elements(self,by='id',value=none)

二.各种元素定位方式举例:

以图百度页面为例

(1)find_element_by_id():通过id定位元素,例如定位到百度页面搜索框的id为kw,定位到搜索框后,可通过send_keys()方法输入搜索内容

from selenium inport webdriver

driver=webdriver.Firefox()

driver.get(“http://www.baidu.com")

driver.find_element_by_id('wd').send_keys('hello')

(2)find_element_by_name():通过name属性定位元素,例如上图中可以定位到百度搜索框的name为wd

driver.find_element_by_name('wd').send_keys('hello')

(3)find_element_by_class_name():通过class属性定位元素,上图实例中可以定位到百度搜索框的class为s_ipt

driver.find_element_bu_class_name('s_ipt').send_keys('hello')

(4)find_element_by_tag_name():通过tag属性定位元素,上图实例中可以定位到百度搜索框的tag为最前面的input

driver.find_element_bu_tag_name('input').send_keys('hello')

这个执行肯定会报错,因为tag=input不是唯一的,一般tag有很多都是一样的,因此很少用tag_name来定位

(5)find_element_by_link_text():通过超链接link进行定位。这个一般可以用来对超链接按钮进行定位,例如对百度页面的【hao123】进行定位

可以看到它有个href="https://www.hao123.com",说明它是个超链接,对于这种元素,可以用以下方法

driver.find_element_by_link_text('hao123').click()

(6)find_element_by_partial_link_text():通过超链接link属性定位元素

有时候一个超链接的字符串可能比较长,如果输入全称,可能会显示很长,这时可以使用这种模糊匹配方式,截取其中一部分字符串就行了,如hao123只需要输入ao123也可以定位到

driver.find_element_by_partial_link_text('ao123').click()

以上六种方式都是通过元素属性进行定位的,如果一个元素没有id,tag_name,link_text,class_name等属性,或者属性都是重复的,无法进行定位,则需要通过新的方式定位

(7)find_element_by_xpath

xpath是一种路径语言

可以定位到百度搜索框的xpath为.//*[@id='kw']

driver.find_element_by_xpath(".//*[@id='kw'] ").sendkeys("python")

(8)find_element_by_css_selector():详见3.CSS定位

(9)除此之外,还有两种是参数化的方法

find_element(self,by='id',value=none)

find_elements(self,by='id',value=none)

三、CSS定位

(1)CSS选择器:

#表示id选择器

. 表示class选择器

> 表示子元素,层级

CSS可通过元素的id、class、标签这三个常规属性直接定位到

以百度首页的搜索框为例:

1.通过tagname

driver.find_element_by_cssSelector("input")

2.通过id定位

driver.find_element_by_cssSelector("#kw")

driver.find_element_by_cssSelector("input#kw")  根据标签和id

3.根据className

driver.find_element_by_cssSelector(".s_ipt")  classname前加.

4.根据元素属性

精准匹配:

driver.find_element_by_cssSelector("input[name='wd']")   属性名=属性值,id.class都可写成这种形式
driver.find_element_by_cssSelector("input[type='submit'][value='login']") 多属性

模糊匹配:

driver.find_element_by_cssSelector("input[id^='ctrl']")  匹配到id头部 如ctrl_12

driver.find_element_by_cssSelector("input[id$='ctrl']" ) 匹配到id尾部 如a_ctrl

driver.find_element_by_cssSelector("input[id*='ctrl']" ) 匹配到id中间如1_ctrl_12

 ​ 

css: div.list-val > textarea

 ​ 

css: button[titile=\"干旱 "\]

 ​ 

css:div.step-name > input[type=\\"text"\\]

 ​ 

css: div.plan-duty > div.add-group > i.btn-add

(2)CSS索引:

:nth-child(n) 选择器匹配父元素中的第 n 个子元素,元素类型没有限制。

n 可以是一个数字,一个关键字,或者一个公式。

 ​ 

#选择第一个option
driver.find_element_by_css_selector("select#nr>option:nth-child(1)").click()
#选择第二个option
driver.find_element_by_css_selector("select#nr>option:nth-child(2)").click()
#选择第三个option
driver.find_element_by_css_selector("select#nr>option:nth-child(3)").click()

 ​ 

四、Xpath定位

xpath是一种xml的路径语言,也就是一种用来定位元素位置的语言

    ​ 

xpath可以通过id/name/class这些属性定位:

driver.find_element_by_xpath("//*[@id='kw']")

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

driver.find_element_by_xpath("//*[@class='s_ipt']")

也可以通过其他属性定位:

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

此处的*号代表任意标签,如果同一个属性较多,就不要采用*,可以直接写标签名称

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

xpath的特点:

(1)xpath层级:先找父元素或者父元素的父元素

例如:driver.find_element_by_xpath("//span[@id='s_kw_wrap']")

或者:driver.find_element_by_xpath("//form[@id='form'/span/input")

如果一个元素,它的兄弟元素跟它的标签一样,可以通过排序定位到,

例如:

driver.find_element_by_xpath("//select[@id='nr']/option[1]")  #这里的下标是从1开始的

同样的css定位方法:

#选择第一个option
driver.find_element_by_css_selector("select#nr>option:nth-child(1)").click()
#选择第二个option
driver.find_element_by_css_selector("select#nr>option:nth-child(2)").click()
#选择第三个option
driver.find_element_by_css_selector("select#nr>option:nth-child(3)").click()

(2)xpath还支持逻辑运算:and or  not

一般用的较多的是and运算,同时满足两个属性

driever.find_element_by_xpath("//*[@id='kw' and @autocomplete='off']")

 (3) xpath还支持模糊匹配:

#coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")

#xpath模糊匹配某个属性
driver.find_element_by_xpath("//*[contains(text(),'hao123')]").click()
driver.find_element_by_xpath("//*[contains(@id,'kw')]").click()
#xpath模糊匹配以什么开头
driver.find_element_by_xpath("//*[starts-with(@id,'s-top')]").click()
#xpath模糊匹配以什么结尾
driver.find_element_by_xpath("//*[ends-with(@id,'top-left')]").click()
#xpath支持正则表达式
driver.find_element_by_xpath("//*[matchs(text(),'hao123')]").click()

(4) xpath索引:xpath索引从1开始算

例如:driver.find_element_by_xpath("//select[@id='nr']/option[1]")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/738222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存