selenium WEB自动化——八种元素元素定位

序言:

想要实现自动化,则必须要掌握如下四个流程:定位元素,操作元素,获取返回结果,断言(判断测试结果与期望结果是否一致),测试结果自动输出。其中元素定位在这四个环节中是占主导地位,如果一个页面上的元素不能被定位到,那后面的操作就无法继续了。

以下记录webdriver提供的八种基本元素定位方法,就以百度为例讲解如下八种元素定位:

1. id定位: find_element_by_id()

2. class定位:find_element_by_class_name()

3. tag定位:find_element_by_tag_name(s)

4. name定位: find_element_by_name()

5. link定位:find_element_by_link_text()

6. partial_link定位:find_element_by_partial_link_text()

7. xpath定位:find_element_by_xpath()

8. CSS定位:find_element_by_css_selector()

元素定位八大方法:

接下来以Chrome浏览器的百度网页的输入框作为记录对象

一、id定位: find_element_by_id()

    1. 通过F12进入调试页面

    2. 在调试页面中单击调试页面左上角的指针

    3. 将箭头移动到百度搜索输入框上,输入框呈高亮状态,单击输入框可直接定位在输入框的web属性上。如下图的蓝色部分就是定位到的百度输入框的属性:

  <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">    

 

  4. 从上面定位到的元素属性中,可以看到有个id属性:id="kw",下面通过id属性到这个元素。

     5. 定位到搜索框后,用send_keys()方法实现在输入框中输入要查询的内容。  

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_id("kw")
8 element.send_keys("python")

二、tag定位:find_element_by_tag_name()

  1. 查看元素属性的方法同ID定位,百度输入框的元素属性:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

  2. 从上面定位到的元素属性中,可以看到tag(标签)属性,如上面搜索框的元素属性是最前面的input,下面通过tag属性到这个元素。

  注释:当前百度页面中元素为input的并非唯一,所以无法通过find_element_by_name()定位到元素名称为input的,以下用例只是tag定位的示范。

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_tag_name("input")
8 element.send_keys("python")

三、class定位:find_element_by_class_name()

  1. 查看元素属性的方法同ID定位,百度输入框的元素属性:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

  2. 从上面定位到的元素属性中,可以看到class属性:class="s_ipt",下面通过class属性到这个元素。

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_class_name("s_ipt")
8 element.send_keys("python")

四、name定位: find_element_by_name()

  1. 查看元素属性的方法同ID定位,百度输入框的元素属性:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

  2. 从上面定位到的元素属性中,可以看到name属性:name="wd",下面通过name属性到这个元素。

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_name("wd")
8 element.send_keys("python")

五、link定位:find_element_by_link_text()

  1. 查看元素属性的方法同ID定位,百度一下页面上的"hao123"这个按钮的元素属性:<a class="mnav" target="_blank" href="http://www.hao123.com">hao123</a>

  2. 从上面定位到的元素属性中,可以看到是一对以<a>开头,</a>结尾的从超链接(标准超链接都带有href属性,href等号后面的链接为跳转的网址),可以此超链接的文本信息为:hao123,下面通过hao123属性定位到这个元素,然后模拟鼠标的单击操作实现访问hao123页面

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_link_text("hao123")
8 element.click()

 

六、partial_link定位:find_element_by_partial_link_text()

  1. 查看元素属性的方法同ID定位,百度一下页面上的"hao123"这个按钮的元素属性:<a class="mnav" target="_blank" href="http://www.hao123.com">hao123</a>

  2. 有的超链接中他的文本信息可能比较长,如果输入全称的话,会显得很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了,如超链接中的文本信息“hao123”,只需输入“o123”也可以定位到,如下:

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_partial_link_text("hao123")
8 element.click()

七、xpath定位:find_element_by_xpath()

  以上定位方式都是通过元素的某个属性来定位的,但假如一个元素它既没有id、class、name属性也不是超链接,或者其元素和属性都不是唯一的,那通过以上的六种方法就定位不到对应的位置,这个时候可以用xpath解决。

   获取元素的xpath路径方法如下:

  1. 单击键盘的F12按钮调出debug页面。

  2. 鼠标左键单击debug页面的指针按钮。

  3. 鼠标选中debug窗口中的元素属性中,点击鼠标右键选择copy->copy Xpath即可获取到此元素的xpath路径://*[@id="kw"],如下图所示。

 

 

   4. 通过xpath定位元素并实现输入。 

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_xpath('//*[@id="kw"]')
8 element.send_keys("python")

 

八、CSS定位:find_element_by_css_selector()

  1. CSS的元素获取方法可参考xpath,在点击鼠标右键选择copy->copy selector即可获取到此元素的CSS选择器:#kw。

  2. 通过CSS选择器定位元素并实现输入。

1 # coding:utf-8
2 from selenium import webdriver
3 
4 
5 driver = webdriver.Chrome()
6 driver.get("https://www.baidu.com")
7 element = driver.find_element_by_css_selector("#kw")
8 element.send_keys("python")

 

posted @ 2021-10-07 15:20  启秀  阅读(411)  评论(0编辑  收藏  举报