第四节:元素定位方法

webdriver 提供的find_element_by_*的八种元素定位方法:

方法一:通过id定位

语法:find_element_by_id() 

举例:find_element_by_id("kw")

方法二:通过name定位

语法:find_element_by_name()

举例:find_element_by_name("wd")

方法三:通过class name定位

语法:find_element_by_class_name() 

举例:find_element_by_class_name("s_ipt")

方法四:通过tag name定位

语法:find_element_by_tag_name()

举例:find_element_by_tag_name("input") 

方法五:通过link text定位

语法:find_element_by_partial_link_text()

举例:find_element_by_link_text("新闻")

说明:在执行中文的地方出现在乱码,可以在中文件字符串的前面
加个小“
u”可以有效的避免乱码的问题,加 的作用是把中文字符串转换中 unicode 编码,如:
find_element_by_link_text(u"新闻") 

方法六:通过parial link 定位 

语法:find_element_by_partial_link_text( )

举例:

一个很长很长的文本链接 

find_element_by_partial_link_text("一个很长的")
find_element_by_partial_link_text("
文本链接")

方法七:通过XPATH定位

举例:找到百度输入框和搜索按钮
A:绝对路径定位:[用标签名的层级关系来定位元素的绝对路径 ]

find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input") 

find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input") ------>说明:div[2]表示第二个 div 标签

B:利用元素属性定位:

find_element_by_xpath("//input[@id='kw']") ------》说明://表示当前页面某个目录下,input 表示定位元素的标签名,[@id='kw'] 表示这个元素的 id 属性值等于kw

find_element_by_xpath("//input[@id='su']")
find_element_by_xpath("//input[@id='wd']")
find_element_by_xpath(
"//input[@class='s_ipt']")
find_element_by_xpath("//*[@class='bg s_btn']")
 -----》不想指定标签名也可以用星号(*)代替
说明:使用 XPath 不仅仅只局限在 idname class 这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素 

find_element_by_xpath("//input[@maxlength='100']")
find_element_by_xpath("//input[@autocomplete='off']")
find_element_by_xpath("//input[@type='submit']")

C:层级与属性结合 -----》适用于本身没有可利用的属性值,我们可利用他的上一级属性值

find_element_by_xpath("//span[@class='bg s_ipt_wr']/input") 

说明:通过 class 属性定位到是父元素,后面/input 也就表示父元素下面标签名为input 的子元素。如果父元素没有可利用的属性值,那么可以继续向上查找“爷爷”元素。 

D:使用逻辑运算符 ---》如果一个属性不能唯一的区分一个元素,我们还可以使用逻辑运算符连接多个属性来区别于其它属性。




如果要找到第一个元素:方法为:find_element_by_xpath("//input[@id='kw' and @class='su']/span/input") 

---------------------------------说明:可以通过firebug复制XPATH----------------------------------------------------------------------------------------------------------------

方法八:通过CSS 定位
CSS定位,一般情况下定位速度要比 XPath
CSS 选择器的常见语法:

选择器 例子 描述
.class .intro class 选择器,选择 class="intro"的所有元素
#id #firstname id 选择器,选择所有 id="firstname"所有元素
* * 选择所有元素
element p 元素所有

元素

element > element div > input 选择父元素为
元素的所有 元素
element + element div + input 选择紧接在
元素之后的所有

元素。

[attribute=value] [target=_blank] 选择 target="_blank" 的所有元素。


举例:


maxlength="100" value="" name="wd">


value="
百度一下">

A:通过 class 属性定位 (点号(.)表示通过 class 属性来定位元素 )
find_element_by_css_selector(".s_ipt") ----》定位到输入框

B:通过 id 属性定位 (井号(#)表示通过 id 属性来定位元素 )

find_element_by_css_selector("#kw") ----》定位到输入框

C:通过标签名定位: [通过这种方式很难唯一的标识一个元素 ]

find_element_by_css_selector("input") 

D:通过父子关系定位:
find_element_by_css_selector("span>input")
E:通过属性定位:
find_element_by_css_selector("input[autocomplete='off']")
F:组合定位:

find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")
说明:它的标签名叫 span,它有一个 class 属性值叫 bg s_ipt_wr,它有一个子元素,标签名
input,并且这个子元素的 class 属性值叫 s_ipt
----------------------------说明:可以使用 Firebug 工具帮助我们生成 CSS 语法。通过 Firebug 定位元素,在元素上右键点击选择“复制 CSS ------------



webdriver提供的用 By 定位元素
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"
新闻")
find_element(By.PARTIAL_LINK_TEXT,u"
")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
find_element()
方法只用于定位元素。它需要两个参数,第一个参数是定位方式,这个由 By 提供;另第二个参数是定位的值。

说明:在使用 By 时需要将 By 类导入。from selenium.webdriver.common.by import By





















你可能感兴趣的:(第四节:元素定位方法)