八大元素定位

一、八种基本元素定位方法

1.通过id定位:find_element_by_id()
2.通过name定位:find_element_by_name()
3.通过class定位:find_element_by_class_name()
4.通过tag定位:find_element_by_tag_name()
5.通过link定位:find_element_by_link_text()----精准匹配
6.通过partial_link定位:find_element_by_partial_link_text()-----模糊匹配
7.通过xpath定位:find_element_by_xpath()
8.通过css定位:find_element_by_css_selector()

其中每一种定位方法又有两种方式,比如通过id来定位:

find_element_by_id()

find_elements_by_id()

这两者的区别在于,不加s返回的是第一个匹配到的元素,加上s返回所有匹配到的元素

二、XPATH定位

在ui自动化中比较灵活又常用的是xpath定位,以下是几种xpath定位的语法格式

在说xpath定位之前,格式要先弄清楚

绝对定位:/开头,严格按照元素的树级路径(只能是爸爸的儿子)
相对定位://开头,相对路径(爸爸的所有后代)

xpath定位语法格式:

 

单个属性://标签名[@属性名称=值]
多个属性://标签名[@属性名称=值 and/or @属性名称=值]
包       含://标签名[contains(@属性名称,“值")],例://a[contains(@href,"abc")]
文       本://标签名[text()=文本],例://a[text()='作业']
包含和文本同用://a[contains(text(),'作业')]

 

针对xpath的几种语法格式定位分别进行举例说明:

(1)、单个属性

例如在网址栏位输入www.baidu.com,去定位百度输入框这个元素,用鼠标 点击上去发现该元素有class、id、name属性,非常之丰富,那我们就可以根据其中的任何一个进行定位

//*[@id='kw']

//*[@name='wd']

//*[@class='s_ipt']

 

(2)、多个属性

例如定位百度这张图片所在元素,它也存在很多个不同的属性,只通过一个属性无法定位的时候,我们可以根据多个属性进行组合定位

 

 

(3)、包含

当元素的某个属性的值很长,或者不好记的时候,我们可以使用包含,例如定位“百度一下”这个按钮的元素,value值包含百度一词即可定位到唯一一个

 

 

(4)、文本

//span[text()='换一换']

 

 (5)、包含和文本同用

//span[contains(text(),'换一换')]

 

 

三、XPATH轴定位

轴运算

ancestor:祖先节点,包括父

parent:父节点

preceding:当前元素节点标签之前的所有节点(html页面先后顺序)

preceding-sibling:当前元素节点标签之前的所有兄弟节点

following:当前元素节点标签之后的所有节点(html页面先后顺序)

following-sibling:当前元素节点标签之后的所有兄弟节点

 轴定位语法:

已知的元素/轴名称::标签名称[@属性=值]

举例:

以百度首页为例,定位“百度一下”按钮的元素,用鼠标定位到该按钮后,发现该元素的父标签是<span>,span的父标签是<form>,我们可以通过form标签来一步步找到“百度一下”的标签

以下提供两种xpath路径:

//form[@id='form']//following-sibling::span[@class='bg s_btn_wr']/input----------先通过id找form标签,再通过class找其兄弟节点,再找下面的input标签

//form[@id='form']//following::input[@id='su']---------------------先通过id找form标签,再找该节点后的所有节点中找出id为su的input标签

所以元素定位是非常灵活的,可以有多种方式,平时一般较难定位的才会用到轴定位,实际上改元素通过id就能唯一定位了

 

 四、CSS定位语法

driver.find_element_by_css_selector("#kw").send_keys("python")------id属性
driver.find_element_by_css_selector(".s_ipt").send_keys("python")------class属性
driver.find_element_by_css_selector("[name='wd']").send_keys("python")-----name属性
driver.find_element_by_css_selector("input#kw").send_keys("python")----标签与id属性的组合
driver.find_element_by_css_selector("input.s_ipt").send_keys("python")------标签与class属性的组合
driver.find_element_by_css_selector("form#form>span>input").send_keys("python")-----通过层级关系定位

 

posted @ 2020-03-17 09:51  树花  阅读(2740)  评论(0编辑  收藏  举报