单个元素常用定位利器
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代码的网页
Heading
CatDogCarGoat匹配示例:
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代码的网页
Heading
CatDogCarGoatlocator
匹配
语法
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://example.com/article/selenium-location/