WebDriver⼋种基本定位⽅式详解(xpath+css)
山东一本线
WebDriver提供⼋种元素定位⽅法,在python语⾔中对应⽅法如下:
id →name
高考志愿填报软件class name →tag name
link text →partial link text
xpath→css lector
find_element_by_id()→find_element_by_name()
find_element_by_class_name()→find_element_by_tag_name()
前进档
find_element_by_link_text()→find_element_by_partial_link_text(
find_element_by_xpath()→find_element_by_css_lector()
1、id定位
HTML规定id属性在HTML中必须是唯⼀的,这类似于公民的⾝份证号,具有很强的唯⼀性,WebDriver提供的id定位⽅式就是通过元素的id属性来查找元素,通过id定位百度的输⼊框和搜索按钮,⽤法如下:
find_element_by_id(“kw”)
find_element_by_id(“su”)
2、name定位
HTML规则name来指定元素的名称,因此他的作⽤更像是⼈的姓名,name的属性值,在HTML⽂档中可以不唯⼀,通过name定位百度输⼊框:
find_element_by_name(“wd”)
3、class定位
HTML规定class来指定元素的类名,⽤法和id、name类似,通过class定位百度输⼊框和搜索按钮:
find_element_by_class_name(“s_ipt”)
find_element_by_class_name(“bg_s_btn”)
4、tag定位
HTML的本质就是通过tag来定义实现不同的功能,每⼀个元素本质上就是⼀个tag。因为⼀个tag往往⽤来定义⼀类功能,所以通过tag识别某个元素的概率⽐较低,例如我们打开⼀个页⾯,会看到⼤量的
<div> <input>等tag,故使⽤tag定位百度的搜索框以及按钮时候,会发现都是<input>
find_element_by_tag_name(“input”)
这样定位到的元素是不唯⼀的。
小松果儿5、link定位
link专门⽤来定位⽂本链接,例如百度的新闻、地图链接等可以这样定位:
find_element_by_link_text(“新闻”)
find_element_by_link_text(“地图”)
6、partial link定位mac怎么格式化
partial link定位是link定位的⼀种补充,有些⽂本链接⽐较长,这时可以取⽂本链接的⼀部分定位,只有这⼀部分信息可以唯⼀地标识这个链接:
eg:
<a calss=“xxx” name=“xxxx” herf="#">⼀个⾮常长的⽂本链接xxxxxxxx<\a>
通过partial link定位:
find_element_by_partial_link_text(“⼀个⾮常长的”)
find_element_by_partial_link_text(“⽂本链接”)
为什么要分手理想状态下,页⾯中每个元素都有⼀个唯⼀的id name属性值,我们可以使⽤ id 、name属性定位元素,然⽽,现实并没有这般美好,很多时候元素并没有id name属性,或者多个元素的name属性值相同,⼜或者每次刷新页⾯,id都会随机变化,这些情况下,使⽤上述定位⽅式略显尴尬,我们需要使⽤Xpath CSS定位
7、xpath定位
xpath 是⼀种再XML⽂档中定位元素的语⾔。因为HTML可以看做XML的⼀种实现,所以可以使⽤xpath定位⽅式。
7.1 xpath 基本概念:
XPath 使⽤路径表达式来选取 XML ⽂档中的节点或者节点集。这些路径表达式和我们在常规的电脑⽂件系统中看到的表达式⾮常相似。
在 XPath 中,有七种类型的节点:元素、属性、⽂本、命名空间、处理指令、注释以及⽂档(根)节点。XML ⽂档是被作为节点树来对待的。树的根被称为⽂档节点或者根节点。
节点之间:⽗ ⼦ 同胞 先辈 后代
最常⽤的路径表达式:
表达式描述
/从根节点选取
//从匹配选择的当前节点选择⽂档中的节点,⽽不考虑它们的位置
表达式描述
.选取当前节点
…选取当前节点的⽗节点
@选取属性
谓语(Predicates)
谓语⽤来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在⽅括号中。
选取未知节点
XPath 通配符可⽤来选取未知的 XML 元素。
通配符描述
*匹配任何元素节点
@*匹配任何属性节点
node()匹配任何类型的节点
7.2 xpath 常⽤⽅式
7.2.1绝对路径定位
绝对路径就是写出元素的绝对路径,如果把元素看成⼀个⼈的话,,假设这个⼈没有任何属性特征(
⼿机号、姓名、⾝份证号),但是这个⼈⼀定存在于某个地理位置,如中国xx省xx市xx区xx路xx号,对应页⾯元素⽽⾔,也会有这样⼀个绝对地址。
表示说的词语有哪些
如:
find_element_by_xpath("/html/body/div/div[2]/div/div/div/form/span/input")
绝对路径是从最外层html/body⽂本内,⼀级⼀级的向下查找,如果⼀个层级下有多个相同的标签名,那么就按上下顺序确定是第⼏个,例如 div[2]表⽰当前层级下的第⼆个标签。
7.2.2 利⽤元素属性定位
xpath可以使⽤元素的属性值来定位,属性值使⽤@
eg(百度搜索框):
find_element_by_xpath("//input[@id=“su”]")
find_element_by_xpath("//*[@id=“su”]")
其中://表⽰当前路径下,input表⽰定位元素的标签名,如果不想使⽤标签名,可以使⽤(*)代替,
因为选⽤的属性id属性值时唯⼀的,[@id=“su”]表⽰元素的属性值等于kw
7.2.3 层级与属性结合
如果⼀个元素本⾝没有可以唯⼀表述的属性值,那么可以找其上⼀级的元素,如果上⼀级元素有唯⼀标识的属性值,也可以使⽤,如:
#file-class-contain > ul:nth-child(1) > li
find_elemet_by_xapth("//*[@id=“datasHtml”]/div[1]/div[1]/button[6]")
find_elemet_by_xapth(“file-class-contain > ul:nth-child(1) > li”)
如果⽗级不能唯⼀定位,也可以再向上找,意思就是只要找到⼀个可以唯⼀定位的层级,然后⼜向下定位要定位的元素。
沃尔特水库
7.2.4 使⽤逻辑运算符
还可以使⽤逻辑运算符连接多个属性值来查找元素,如and
find_elemet_by_xapth("//input[@id=‘kw’ and @class=‘su’]/span/input")
7.3 xpath 定位实例
⾕歌 ⽕狐浏览器 ⾃带的开发者⼯具都可以很⽅便的使⽤xpath定位元素。
如⾕歌浏览器:
打开F12,定位到元素,copy --> copy xpath可以直接获取xpath定位⽅式。如果拷贝出来特别长的话,⾃⼰修改后,复制到F12的搜索框(Ctrl+F调出)中回车验证是否可以选中元素,标黄部分代表可以选中。如果定位的元素不是唯⼀值时,回车时会在多个值之间切换显⽰。
其实,我们很多时候,并不是希望只是单纯的可以定位到这个元素,尤其是处理界⾯上添加的数据的时候,我们很希望可以作为参数,添加的数据,可以通过name或者其他属性定位到,以便进⾏后续的其他操作。
例如:
这是某个软件的某个页⾯,界⾯可以添加数据,添加完可以进⾏编辑、删除操作。
通过xpath我们可以将此元素定位到:
#tableData > tr > td:nth-child(2)
可是这样的定位⽅式太局限了,我们并不是每次都知道它准确的处于第⼏个位置,此时可以使⽤属性值来定位: