菜鸟笔记
提升您的技术认知

selenium之find-ag真人游戏

一 方法

selenium为定位元素提供了较多方法,大致分为单元素定位和多元素定位.

# 查找单个元素:

find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name find_element_by_css_selector
# 查找多个元素
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
# 两个私有方法
find_element
find_elements

 二 用法

 2.1 find_element和find_elements用法

from selenium.webdriver.common.by import by
driver.find_element(by.xpath, '//button[text()="some text"]')
driver.find_elements(by.xpath, '//button')

按各种分类的属性如下:

xpath = "xpath"
link_text = "link text"
partial_link_text = "partial link text"
name = "name"
tag_name = "tag name"
class_name = "class name"
css_selector = "css selector"

2.2 按ip定位

login_form = driver.find_element_by_id('loginform')

使用此策略,将返回id属性值与位置匹配的第一个元素。如果没有元素具有匹配的id属性,nosuchelementexception则将引发a。

2.3 按name定位

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')

使用此策略,将返回name属性值与位置匹配的第一个元素。如果没有元素具有匹配的name属性,nosuchelementexception则将引发a。

2.4 通过xpath定位

使用xpath的主要原因之一是,当您没有想要查找的元素的合适的id或name属性时。您可以使用xpath以绝对术语(不建议使用)定位元素,也可以相对于具有id或name属性的元素定位。xpath定位器还可用于通过id和name以外的属性指定元素。

绝对xpath包含来自根(html)的所有元素的位置,因此,仅对应用程序进行一点点调整就可能导致失败。通过找到具有id或name属性的附近元素(最好是父元素),您可以根据关系找到目标元素。这种更改的可能性要小得多,并且可以使您的测试更可靠。

 
  

如下定位:

# 绝对路径(如果仅对html进行少许更改,则会中断)
login_form = driver.find_element_by_xpath("/html/body/form[1]")
# html中的第一个表单元素
login_form = driver.find_element_by_xpath("//form[1]")
# 具有名为id的属性和值为loginform的表单元素
login_form = driver.find_element_by_xpath("//form[@id='loginform']")

2.4.1 绝对路径(如果仅对html进行少许更改,则会中断)

login_form = driver.find_element_by_xpath("/html/body/form[1]")

2.4.2 元素及其属性定位

查找具体的元素,必须在前面输入标准开头//,表示从当前节点寻找所有的后代元素

//div/*          div下面的所有的元素
 
//div//p         先在整个文档里查找div,再在div里查找p节点(只要在内部,不限定是否紧跟) ;等价于 css_selector里的('div p')
 
//div/p          p是div的直接子节点; 等价于 css_selector里的('div > p')
 
//*[@style]      查找所有包含style的所有元素,所有的属性要加@;  等价于 css_selector里的('*[style]')
 
//p[@spec='len'] 必须要加引号;等价于 css_selector里的("p[spec='len']")
 
//p[@id='kw']    xpath中对于id,class与其他元素一视同仁,没有其他的方法

2.4.3 选择节点位置

//div/p[2]                   选择div下的第二个p节点 ;等价于css_selector里的div>p:nth-of-type(2)  符合p类型的第二个节点
 
//div/*[2]                   选择div下第二个元素
 
//div/p[position()=2]        position()=2   指定第二个位置;  等价于上面的 //div/p[2] 
 
          position()>=2      位置大于等于2
 
          position()<2       位置小于2
 
          position()!=2     位置不等于2
 
//div/p[last()]              选择div下的倒数第一个p节点; last()倒数第一个
 
//div/p[last()-1]            选择div下的倒数第二个p节点;
 
//div/p[position()=last()]   倒数第一个
 
//div/p[position()=last()-1] 倒数第二个
 
//div/p[position()>=last()-2]倒数第一个,第二个,第三个

2.4.4 组合定位

//p | //button                       选择所有的p和button,等价于css_selector里的 p, button
 
//input[@id='kw' and @class='su']    选择id=kw 并且 class=su的input元素

2.4.5 兄弟节点

相邻后面的兄弟节点的选择:following-sibling::    两个冒号
//div/following-sibling::p    选择div里相邻的p节点
相邻前面的兄弟节点的选择:preceding-sibling::         此方法在css_selector中没有
//div/preceding-sibling::p[2]   选择div里前面相邻的第二个节点,不加[2]选择的是前面的所有的p节点

2.4.6 父节点

//p[@spec='len']/..      选择p节点的上层节点       此方法在css_selector中没有
 
//p[@spec='len']/../..   上层节点的上层节点

2.5 通过链接文本找超链接

 
  are you sure you want to do this?
  
  cancel
continue_link = driver.find_element_by_link_text('continue')
continue_link = driver.find_element_by_partial_link_text('conti')

使用此策略,将返回链接文本值与位置匹配的第一个元素。如果没有元素具有匹配的链接文本属性,nosuchelementexception则将引发a。

 2.6 通过标签名称定位

 
  
  site content goes here.
heading1 = driver.find_element_by_tag_name('h1')

使用此策略,将返回具有给定标签名称的第一个元素。如果没有元素具有匹配的标签名称,nosuchelementexception 则将引发a。

2.7 通过class定位

 
  

site content goes here.

content = driver.find_element_by_class_name('content')

使用此策略,将返回具有匹配类属性名称的第一个元素。如果没有元素具有匹配的类属性名称,nosuchelementexception则将引发a。

2.8 通过css选择器定位

 
  

site content goes here.

content = driver.find_element_by_css_selector('p.content')

使用此策略,将返回具有匹配css选择器的第一个元素。如果没有元素具有匹配的css选择器,nosuchelementexception则将引发a。

网站地图