1、八种基本元素定位方法css
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()html
其中每一种定位方法又有两种方式,好比经过id来定位:python
find_element_by_id()ui
find_elements_by_id()spa
这二者的区别在于,不加s返回的是第一个匹配到的元素,加上s返回全部匹配到的元素orm
2、XPATH定位htm
在ui自动化中比较灵活又经常使用的是xpath定位,如下是几种xpath定位的语法格式blog
在说xpath定位以前,格式要先弄清楚图片
绝对定位:/开头,严格按照元素的树级路径(只能是爸爸的儿子)
相对定位://开头,相对路径(爸爸的全部后代)ip
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(),'换一换')]
3、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就能惟必定位了
4、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")-----经过层级关系定位