WebDriver元素定位方法
python语言中对应8种方法:
id ---> name class name ---> tag name link text ---> partial link text xpath ---> css selector 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_selector()
1.id定位:
find_element_by_id("kw")
2.name定位
find_element_by_name("wd")
3.class定位
find_element_by_class_name("s_ipt") find_element_by_class_name("bg s_btn") 通过class属性来定位元素
4.tag定位
很难通过标tag name去区分不同的元素 find_element_by_tag_name("input")
5.link定位
专门用来定位文本链接 例如: <a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a> find_element_by_link_text("新闻")
6.partial link定位
partial link定位是对link定位的一种补充,当文本很长时,可以取文本的一部分定位,只要这部分能够唯一标识这个链接 find_element_by_partial_link_text("文本链接")
7.XPath定位
7.1绝对路径定位
find_element_by_xpath("/html/body/div/div[2]/div/div/div/form/span/input") find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")
7.2利用元素属性定位
find_element_by_xpath("//input[@id='kw']") find_element_by_xpath("//input[@id='su']")
//表示当前页面某个目录下,input表示定位元素的标签页
[@id='kw']表示这个元素的id属性值等于kw
通过name和属性值来定位
find_element_by_xpath("//input[@name='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
find_elemnt_by_xpath("*[@class='bg s_btn']")
不想指定标签名,则可以用星号(*)代替 使用XPath不局限于id、name和class这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素
find_element_by_xpath("//input[@maxlength='100']")
find_element_by_xpath("//input[@autocomplete='off']")
find_element_by_xpath("//input[@type='submit']")
7.3层级与属性结合
find_element_by_xpath("//span[@class='bg_s_ipt_wr']/input") span[@class='bg s_ipt_wr']通过class属性定位到父元素,后面/input就表示父元素下面的子元素。若父元素没有可以利用的属性值,那么可以继续向上查找“爷爷”元素
find_element_by_xpath("//form[@id='form']/span/input")
find_element_by_xpath("//form[@id='form']/span[2]/input")
通过一级一级的向上查找,直到找到最外层的<html>标签,这样就是一个决定路径的写法了
7.4使用逻辑运算符
一个属性无法区分一个元素时,可以使用逻辑运算符连接多个属性来查找元素 <input id="kw" class="su" name="ie"> <input id="kw" class="aa" name="ie"> <input id="bb" class="su" name="ie"> 定位第一行元素 find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")
8.CSS定位
css使用选择器来为页面元素绑定属性,定位速度比XPath快
CSS选择器的常见语法
选择器 例子 描述 .class .intro class选择器,选择class="intro"的所有元素 #id #firstname id选择器,选择id="firstname"所有元素 * * 选择所有元素 element p 元素所有<p>元素 element>element div>input 选择父元素为<div>的所有<input>元素 element+element div+input 选择同一级中紧接着在<div>元素之后的所有<input>元素 [attribute=value] [target=_blank] 选择target="_blank"的所有元素
8.1通过class属性定位
find_element_by_css_selector(".s_ipt") find_element_by_css_selector(".bg s_btn")
find_element_by_css_selector()方法用于CSS语言定位元素,点号(.)表示通过class属性来定位元素
8.2通过id属性定位
find_element_by_css_selector("#kw")
find_element_by_css_selector("#su")
#表示通过id属性来定位元素
8.3通过标签名定位
find_element_by_css_selector("input")
通过此种方式很难找到想要的元素
1)通过父子关系定位
find_element_by_css_selector("span>input")
2)通过属性定位:
find_element_by_css_selector("[autocomplete=off]")
find_element_by_css_selector("[name='kw']")
find_element_by_css_selector('[type="submit"]')
3)组合定位
find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")
find_element_by_css_selector("span.bg s_btn_wr>input#su")
有一个父元素标签名叫span;
它有一个class属性值叫bg s_ipt_wr;
它有一个子元素,标签名叫input
这个子元素的class属性值叫s_ipt
XPath与CSS的类似功能对比
定位方式 Xpath CSS 标签 //div div By id //div[@id='eleid'] div#eleid By class //div[@class='eleclass'] div.eleid By 属性 //div[@title='Move mouse here'] div[title=Move mouse here] div[title^=Move] div[title$=here] div[title*=mouse] 定位子元素 //div[@id='eleid']/* div#eleid>* //div/h1 div>h1