2、元素定位方式

web页面的元素定位方式共有8种:

1、id定位     使用  find_element_by_id()  方法

2、name定位  使用   find_element_by_name()  方法

3、class定位    使用   find_element_by_class_name() 方法

4、tag定位    使用     find_element_by_tag_name()  方法

  HTML本身就是通过tag来定义实现不同的功能,如<div>,<input>,<a>等就是tag,所以很难通过标tag name 去区分不同的元素

5、link定位    使用     find_element_by_link_text()  方法

  link定位专门用来定位超链接,文本链接

6、partial link 定位   使用     find_element_by_partial_link()  方法

  partial link 定位是对link定位的一种补充,有些文本链接比较长,我们可以取文本链接的一部分定位,只要这一部分信息可以唯一的标识这个链接

  如:“这是一个很长很长的文本链接”   定位的时候可以这样写:find_element_by_partial_link(“这是一个很长”)

7、XPath 定位    find_element_by_xpath()  方法

  7.1 绝对路径定位

    绝对路径定位的方法不常用,路径太长

  7.2 利用元素属性定位

     1 driver.find_element_by_xpath('//input[@id="kw"]') 

    //表示当前页面某个目录下,input表示定位元素的标签名,[@id = 'kw']表示这个元素的id属性值等于kw

    如果不想指定标签名,也可以使用星号(*)代替,元素的任意属性值都可以使用,只要它能唯一标识这个元素即可

     1 driver.find_element_by_xpath("//*[autocomplete='off']") 

  7.3 层级与属性结合

    如果一个元素本身没有可以唯一标识这个元素的属性值,那么可以找其上一级元素,知道有可以唯一标识的属性值即可

     1 driver.find_element_by_xpath("//span[class=soutu-btn]/input") 

  7.4 使用逻辑运算符

    如果一个属性无法唯一一个元素,那么可以考虑使用逻辑运算付连接多个属性来查找元素

     1 driver.find_element_by_xpath("//input[@id='kw' and @name='wd']") 

8、css 定位  使用方法:find_element_by_css_selector()

  css可以较为灵活的选择控件的任意属性,定位速度比xpath快

  8.1通过class属性定位,用(.)号表示:

   1 driver.find_element_by_css_selector(".s_ipt") 

  8.2通过id属性定位,用(#)号表示:

   1 driver.find_element_by_css_selector("#kw") 

  8.3通过标签名定位:

1 driver.find_element_by_css_selector("input")
2 #通过父子关系定位
3 driver.find_element_by_css_selector("span>input")
4 #通过属性定位
5 driver.find_element_by_css_selector("[name='kw']")
6 #组合定位
7 driver.find_element_by_css_selector("form.fm>span>input.s_ipt")

9、用By定位元素

  针对前面八种定位方法,webdriver还提供了另外一种写法,即统一调用  find_element( ) 方法,通过By来声明定位的方法,并且传入对应定位方法的定位参数

  在使用By定位元素的时候,首先需要到时By类

   1 from selenium.webdriver.common.by import By  

1     driver.find_element(By.ID,"kw")
2     driver.find_element(By.NAME,"wd")
3     driver.find_element(By.CLASS_NAME,"s_ipt")
4     driver.find_element(By.TAG_NAME,"input")
5     driver.find_element(By.LINK_TEXT,"新闻")
6     driver.find_element(By.PARTIAL_LINK_TEXT,"")
7     driver.find_element(By.XPATH,"//input[@id='kw']")
8     driver.find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")

猜你喜欢

转载自www.cnblogs.com/wang-rong/p/11372882.html