八大元素定位
一、八种基本元素定位方法
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”)—–通过层级关系定位