单个元素常用定位利器

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 国际许可协议