前文已经学会如何简单地使用webderiver了,这篇就交自动化测试入门必备元素定位的技巧
不管是web端使用Selenium还是app端使用Appium,只要是UI测试,就逃不掉元素定位这个技能
可以说如何定位元素,将定型一个测试人员的测试思维
本章将带大家如何用firebug插件来检查页面中的元素
此外还做了一份Chrome浏览器如何检查元素和IE浏览器如何检查元素的文档,需要的可以点击并输入暗号:CSDN获取
书接前文:【Selenium】selenium自动化入门之webdriver框架使用
appium教程:【appium】appium自动化入门之环境搭建(上)
元素定位在 firefox 上可以安装 Firebug 和 firepath 辅助工具进行元素定位。
以百度搜索框为例,先打开百度网页
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 通过id定位百度搜索框,并输入“测试”
driver.find_element_by_id("kw").send_keys("测试")
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 通过name定位百度搜索框,并输入“测试”
driver.find_element_by_name("wd").send_keys("测试")
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 通过class定位百度搜索框,并输入“测试”
driver.find_element_by_class_name("s_ipt").send_keys("测试")
1.从上面定位到的元素属性中,可以看到每个元素都有 tag(标签)属性,如搜索框的标签属性,就是最前面的 input
2.很明显,在baidu这样一个页面中,相同的标签有很多,所以一般不用标签来定位。以下例子,仅供参考
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 通过tag定位百度搜索框,并输入“测试”
driver.find_element_by_tag_name("s_ipt").send_keys("测试")
从元素属性可以分析出,有个 href = "http://www.hao123.com
说明它是个超链接,对于这种元素,可以用以下方法
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 通过link属性定位到(hao123)按钮,并点击按钮
driver.find_element_by_link("hao123").click()
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# partial_link是一种模糊匹配的方式,对于超长字符串截取其中一部分
driver.find_element_partial_link_text("hao123").click()
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 在firePath里copy处xpath地址
driver.find_element_by_xpath(".//*[@id='kw']").send_keys("测试")
selenium 的 webdriver 提供了 18 种(注意是 18 种,8种定位,8种复数定位还有两种参数化定位)
的元素定位方法
这里主要掌握xpath和css定位,这两种定位非常的更加灵活,足以应对大部分公司的业务需求了
接下来就着重讲这两种定位方式的使用
在上面简单的介绍了用工具查看目标元素的 xpath 地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到。这个时候就需要自己手动的去写xpath 了,这一篇详细讲解 xpath 的一些语法。
那么什么是 xpath 呢?
官方介绍:XPath 即为 XML 路径语言,它是一种用来确定 XML 文档中某部分位置的语言。
反正小编看这个介绍是云里雾里的,通俗一点讲就是通过元素的路径来查找到这个元素的,相当于通过定位一个对象的坐标,来找到这个对象。
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 用xpath通过id属性定位
driver.find_element_by_xpath("//*[@id='kw']").send_keys("测试")
# 用xpath通过name属性定位
driver.find_element_by_xpath("//*[@name='wd']").send_keys("测试")
# 用xpath通过class属性定位
driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys("测试")
实际业务操作中,没有id、name、class 这些元素属性都是挺正常的,这时候也可以通过其它属性定位的
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 用xpath通过其他属性定位
driver.find_element_by_xpath("//*[@autocomplete='off']").send_keys("测试")
1.3.3 xpath:标签
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 用xpath通过其他属性定位
driver.find_element_by_xpath("//*input[@autocomplete='off']").send_keys("测试")
# 用xpath通过id属性定位
driver.find_element_by_xpath("//*input[@id='kw']").send_keys("测试")
# 用xpath通过name属性定位
driver.find_element_by_xpath("//*input[@name='wd']").send_keys("测试")
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# 通过定位父元素来定位input输入框
driver.find_element_by_xpath("//span[@id='s_kw_wrap']/input").send_keys("测试")
# 通过定位父元素的父元素来定位input输入框
driver.find_element_by_xpath("//span[@id='form']/span/input").send_keys("测试")
如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。
虽然其中一个元素很难识别,但是时间是有先后的,于是可以通过它生成的时间定位到
用 xpath 定位索引,是从 1 开始算起的,跟 Python 的索引不一样
# 用xpath定位第一个
driver.find_element_by_xpath("//span[@id='nr']/option[1]").click()
# 用xpath定位第二个
driver.find_element_by_xpath("//span[@id='nr']/option[2]").click()
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# xpath逻辑运算
driver.find_element_by_xpath("//*[@id='kw' and @autocomplete='off']")
# coding:utf-8
from selenium import webderiver
driver = webderiver.Firefox()
driver.get("https://www.baidu.com")
# xpath模糊匹配功能
driver.find_element_by_xpath("//*[contains(text(),'hao123')]").click()
# xpath模糊匹配某个属性
driver.find_element_by_xpath("//*[contains(@id,'kw')]").click()
# xpath模糊匹配以什么开头
driver.find_element_by_xpath("//*[starts-with(@id,'s_kw_')]").click()
# xpath模糊匹配以什么结尾
driver.find_element_by_xpath("//*[ends-with(@id,'kw_wrap')]").click()
# xpath以正则表达式定位
driver.find_element_by_xpath("//*[matchs(test(),'hao13')]").click()
模糊定位是真的强,可以说模糊定位能够定位一半的元素,剩下的一半就可以交给Css定位去定位到
下一篇更新css,今日周末,应该可以一起更新出来
另外再提一嘴,这边是有视频教程的,需要的可以点击并输入暗号:CSDN或者有什么不懂的,想版本不兼容,奇奇怪怪的bug也可进来交流提出