单个元素常用定位利器
1.id定位(使用id属性值定位):find_element_by_id("value")
2.name定位(使用name属性值定位):find_element_by_name("value")
3.class定位(使用class属性值定位):find_element_by_class_name("value")
4.tag定位(使用标签名定位):find_element_by_tag_name("value")
5.link定位(使用显示文本定位):find_element_by_link_text("value")
6.partial_link定位(使用超链接文本定位):find_element_by_partial_link_text("value")
7.xpath定位(使用xpath定位):find_element_by_xpath("value")
8.css定位(使用CSS选择器定位):find_element_by_css_selector("value")
多个元素常用定位利器
element表示单个元素直接定位,elements是复数形式代表一组元素的定位
1.id定位(使用id属性值定位):find_elements_by_id("value")
2.name定位(使用name属性值定位):find_elements_by_name("value")
3.class定位(使用class属性值定位):find_elements_by_class_name("value")
4.tag定位(使用标签名定位):find_elements_by_tag_name("value")
5.link定位(使用显示文本定位):find_elements_by_link_text("value")
6.partial_link定位(使用超链接文本定位):find_elements_by_partial_link_text("value")
7.xpath定位(使用xpath定位):find_elements_by_xpath("value")
8.css定位(使用CSS选择器定位):find_elements_by_css_selector("value")
xpath定位拓展
xpath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,selenium用户可使用这种强大语言在web应用中定位元素
1.逐级定位元素
语法:driver.find_element_by_xpath("/html/body/form/input")
语义:根据HTML逐级往下查找元素路径位置
2.定位父元素下的第N个元素
语法:driver.find_element_by_xpath("//form/input[2]")
语义:定位父元素form节点下的第2个input元素
3.定位父元素下的最后一个元素
语法:driver.find_element_by_xpath("//form/input[last()]")
语义:定位父元素form节点下的最后一个input元素
4.定位父元素下的倒数第N个元素
语法:driver.find_element_by_xpath("//form/input[last()-1]")
语义:定位父元素form节点下的倒数第2个input元素
5.定位父元素下位置小于N的元素
语法:driver.find_element_by_xpath("//form/input[position()<3]")
语义:定位父元素form节点下的位置小于3的input元素
6.查找匹配的属性值定位
语法:driver.find_element_by_xpath("//input[@value='female']")
语义:查找input节点下带有value属性值为female的元素
7.定位父元素下规定属性值且属性值大于number的元素
语法:driver.find_element_by_xpath("//form/input[@value>1]")
语义:定位父元素form节点下带有value属性,且属性值大于1的元素
8.定位父元素下规定属性值且属性值小于number的元素
语法:driver.find_element_by_xpath("//form/input[@value<1]")
语义:定位父元素form节点下带有value属性,且属性值小于1的元素
9.匹配路径1和路径2
语法:driver.find_elements_by_xpath("//form/input|//form/a")[2]
语义:定位form元素节点下所有的input元素和所有a元素
10.匹配包含指定文本的元素
语法:driver.find_element_by_xpath("//form/a[contains(text(),'点击访问百度')]")
语义:定位a标签下,包含文本'点击访问百度'的元素
CSS选择器定位拓展
1.常见语法介绍
例如这样一段html代码的网页
<div class="formdiv">
<form name="fnfn">
<input name="username" type="text"></input>
<input name="password" type="text"></input>
<input name="continue" type="button"></input>
<input name="cancel" type="button"></input>
<input value="SYS123456" name="vid" type="text">
<input value="ks10cf6d6" name="cid" type="text">
</form>
<div class="subdiv">
<ul id="recordlist">
<p>Heading</p>
<li>Cat</li>
<li>Dog</li>
<li>Car</li>
<li>Goat</li>
</ul>
</div>
</div>
匹配示例:
locator | 匹配 | 语法 |
---|---|---|
css=div | < div ></ div > | 标签选择器,匹配所有使用div标签的元素 |
css=div.formdiv | < div class="formdiv" ></ div > | ”.”表示class选择器,匹配所有class属性中包含formdiv的元素 |
css=ul#recordlist | < ul id="recordlist" >< /ul > | “#”表示id选择器,ul标签下匹配所有id属性等于recordlist的元素 |
css=div.subdiv p | < div class="subdiv" >< p >one< /p >< /div > | 空格表示后代元素选择器,匹配所有属于div.subdiv元素后代的p元素,div.subdiv和p之间用空格分隔 |
css=div.subdiv > ul > p | < div class="subdiv" >< ul >< p >one< /p >< /ul >< /div > | ”>”表示子元素选择器,匹配所有ul元素的子元素p |
css=form + div | < form >one< /form >< div >two< /div > | “+”表示毗邻元素选择器,匹配紧随form元素之后的同级元素div(只匹配第一个) |
css=p ~ li | < p >Heading< /p >< li >Cat< /li > | “~”表示同级元素选择器,匹配所有在p元素之后的同级li元素 |
css=form > input[name=’user’] | < form >< input name="user" >< /form > | form的子节点input节点下属性name的值为user的元素 |
css=input[name$=’id’][value^=’SYS’] | < input value="SYS123456" name="vid" type="hidden" > | “$”表示属性name的值以id结尾且“^”表示属性value的值以SYS开头的input元素 |
css=input:not([name$=id][value^=SYS]) | < input name="username" type="text" >< /input > | ““:not”表示匹配不符合当前选择器的任何元素,与上种情况刚好相反 |
css=li:contains('Goa') | < li >Goat< /li > | “:contains”表示li节点下内容中包含Goa的元素 |
css=li:not(contains('Goa')) | < li >Cat< /li > | “:not(contains)”表示li节点下内容中不包含Goa的元素,与上种情况刚好相反 |
#### 2.css中的结构性定位 | ||
下面提供一段html代码的网页 |
<div class="subdiv">
<ul id="recordlist">
<p>Heading</p>
<li>Cat</li>
<li>Dog</li>
<li>Car</li>
<li>Goat</li>
</ul>
</div>
locator | 匹配 | 语法 |
---|---|---|
css=ul > li:nth(0) | < li >Cat< /li > | 在其父元素中的ul子元素集合中排在第n+1个的li元素 (第一个n=0) |
css=ul > *:nth(0)h和css=ul > :nth(0) | < p >Heading< /p > | 在其父元素中的ul子元素集合中排在第n+1个的元素 (第一个n=0) |
css=ul > li:first | < li >Cat< /li > | 在其父元素中的ul子元素集合中排在第1个的li元素 |
css=ul > :first | < p >Heading< /p > | 在其父元素中的ul子元素集合中排在第1个的元素 |
css=ul > *:last和css=ul > li:last | < li >Goat< /li > | 1.在其父元素中的ul子元素集合中排在最后1个的元素。2.在其父元素中的ul子元素集合中排在最后1个的li元素 |
css=ul > li:even | < li >Cat< /li >< li >Car< /li > | 在其父元素中的ul子元素集合中排在偶数位的li元素 (0,2,4…) |
css=ul > li:odd | < li >Dog< /li > < li >Goat< /li > | 在其父元素中的ul子元素集合中排在奇数位的li元素 (1,3,5…) |
css=ul > li:lt(2) | < li >Cat< /li > | 在其父元素中的ul子元素集合中排在n位之前的li元素 (n=2,则匹配0,1) |
css=ul > li:gt(2) | < li >Goat< /li > | 在其父元素中的ul子元素集合中排在n位之后的li元素 (n=2,在匹配3,4) |
css=ul > li:only-child和css=ul > :only-child和css=ul > *:only-child | [error]not found(ul没有only-child) | 父元素的唯一一个子元素且标签 |
css=div.subdiv > :only-child | < ul id="recordlist" >< /ul > | 父元素的唯一一个子元素且标签为subdiv |
3.下面是一些XPATH和CSS的同义locator比较
定位方式 | Xpath | Css |
---|---|---|
标签 | //div | div |
By id | //div[@id='eleid'] | div#eleid |
By class | //div[@class='eleclass']和//div[contains(@class,'eleclass')] | div.eleclass |
By 属性 | //div[@title='Move mouse here'] | div[title=Move mouse here]和div[title^=Move]和div[title$=here]和div[title*=mouse] |
定位子元素 | //div[@id='eleid']/*和//div/h1 | div#eleid >*和div#eleid >h1 |
定位后代元素 | //div[@id='eleid']//h1 | div h1 |
By index | //li[6] | li:nth(5) |
By content | //a[contains(.,'Issue 1164')] | a:contains(Issue 1164) |
根据子元素定位父元素 | //li[a[contains(.,'Issue 1244')]]和//*[./a[contains(.,'Issue 1244')]]和//ul[.//a[contains(.,'Issue 1244')]] | li {a:contains(Issue 1244)}和ul {a:contains(Issue 1244)} |
根据邻近元素定位 | //li[preceding-sibling::li[contains(.,'Issue 1244')]]和//ul[preceding-sibling::ul[.//a[contains(.,'Issue 1244')]]] | css=li:contains(Issue 1244) + li和css=ul {a:contains(Issue 1244)} ~ ul |
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:http://zhangyanc.club/subject/article/selenium-location/
许可协议:署名-非商业性使用 4.0 国际许可协议