Selenium之用xpath定位元素
selenium中有8种方式可以定位元素,分别为:ID、XPATH、LINK_TEXT、PARTIAL_LINK_TEXT、NAME、TAG_NAME、CLASS_NAME、CSS_SELECTOR,本文记录XPATH的使用方法。
根据路径选择
绝对路径
从根路径即html开始一层一层的往下找,即绝对路径。例如百度首页的按钮:
/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input
相对路径
即相对于其他路径而写的xpath。例如id为form的元素下的所有span子元素:
//*[@id="form"]/span
根据属性选择
常用属性有class、name、text等。举例说明:
表达式 | 说明 |
//span[@class='tools'] |
class等于tools的span元素。(注意:是等于!) |
//div[contains(@class,"submit")] | class包含submit的div元素。(注意:是包含!) |
//a[contains(text(),'取消')] | 文本内容包含"取消"的a元素 |
//input[@name='mobile'] | name等于mobile的input元素 |
//input[@name="item"][not(@disabled)]/.. | name等于item且没有disabled属性的input元素的父元素 |
//*[@type='hidden'] | type属性等于hidden所有元素。(注意通配符*) |
//input[@formcontrolname="username"] | formcontrolname属性等于username的input |
...... |
...... |
*只要是有的属性都可以,不一定是要自己见过的;
*可以写多个属性,表示都需要满足;
*用xpath可以实现所有情况的定位啊,超好用;
根据第几个来选择
根据找到的元素本身取,用(xpath)[1]
比如博客园的登录页面,根据xpath //div[@class="mat-tab-label-content"]可以定位到两个元素,“密码登录”和“短信登录”;若只想取第一个,即密码登录,则用 (//div[@class="mat-tab-label-content"])[1];若只想取第二个,即短信的登录,则用(//div[@class="mat-tab-label-content"])[2];
背景颜色:#FFEFD5
组选择、父节点、兄弟节点
组选择
加上符号 | 即可。例如要选择所有的p元素和h4元素:
//p | //h4
父节点
某个元素的父节点用 /.. 来选择。例如要选择百度首页id为su的元素的父节点:
//*[@id='su']/..
上上级父节点可以加多个/..,例如://*[@id='su']/../..
兄弟节点
选择后续的兄弟节点,可以使用:following-sibling::
1、后续所有兄弟节点:
//*[@name='ie']/following-sibling::*
2、后续的所有兄弟节点中的span元素:
//*[@name='ie']/following-sibling::span
3、后续的所有兄弟节点中的span元素且span元素的class包含bg:
//*[@name='ie']/following-sibling::span[contains(@class,'bg')]
选择前面的兄弟节点,可以使用:preceding-sibling::
例如://input[@name='f']/preceding-sibling::*
End.