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")