Selenium3元素定位
作者:互联网
UI自动化测试
selenium4
firefox selenium ide selenium1.0
selenium2.0=seleium1.0+webdriver selenium4.0 基于WEB的UI的自动化测试框架 支持主流的编程语言(Python,java,c#,php,js),支持针对主流的浏览器进行UI的自动化测试(EDGE,Chrome,Firefox)。
为什么需要自动化测试
在学习自动化测试之前,首先需要思考清楚的是为什么需要学习自动化测试,以及今天业界谈的研发效能对测试而言意味着什么?其实这就需要在测试以及整体研发的角度来思考问题,在今天这样的市场环境中,打造高质量的持续交付产品质量,基本是所有互联网研发团队的测试团队都追求的一个方向。在敏捷流行的今天,以及新的技术在企业全面的落地,在测试而言,就需要通过测试技术的手段以及质量管理的思维能力,来提升测试效率,和交付满足市场期待的产品质量。
自动化测试是所有测试形式里面在目前而言,是最基础的也是最核心的,因为自动化测试连接了功能测试以及高阶的测试开发的测试技术栈的知识体系。即使初级的测试同学,也得具备自动化测试的思维能力和技术能力。
UI自动化测试的必要性
与API自动化测试相比较,UI自动化测试不论是从执行效率还是编程难易度上,都比API自动化测试的成本是比较高的,如果单纯的从技术复杂度上来说,与API的测试技术栈的体系是一样的,不同的是测试的思维以及背后的思想。但是还是需要比较清楚的是,UI自动化测试在DevOps的体系以及测试流水线上它是非常必要的,只不过我们需要使用更加正确的姿势来利用好这个技术,比如使用它来验证核心的流程,而抛开更多的非主线的业务。不能单纯的说它的测试执行效率低,就完全的否定UI自动化测试的价值,这样是很不理性的。在主流的UI自动化测试框架中,Selenium3经过多年的发展,它的技术体系以及生态体系都是非常完善的,能够得到各大主流浏览器厂商的支持,和完善的document文档,以及与各个编程语言之间的兼容。本文章系列主要是以Python语言为主要的编程语言。
元素属性操作
在UI自动化测试中,最核心最基础的就是首先需要定位到元素的属性,然后就可以针对这个属性进行具体的相关的页面交互操作,比如进行进行关键字的输入,以及点击的操作等。
selenium环境搭建: 1、下载chrome的浏览器 2、pip install selenium 3、下载与浏览器版本匹配的驱动文件 A、查看chrome浏览器的版本(105.0.5195.102) B、http://chromedriver.storage.googleapis.com/index.html 4、管理员的身份启动driver的程序 5、把它配置到path的环境变量
from selenium import webdriver import time #针对webdriver进行实例化,同时指定chrome浏览器 driver=webdriver.Chrome() #打开被测试的网站 driver.get('http://www.baidu.com') time.sleep(3) #关闭浏览器 driver.close()
当代码能够执行出结果时则环境配置成功
会自动访问baidu然后过三秒退出
常用元素定位实战
找到元素的属性,然后才能够定位到它,下来针对它来进行各种UI交互的操作。
ID,name,class_name,tag_name,css,xpath,超链接
我们针对这8种元素属性操作方式,都是有不同的方法来进行操作
ID = "id" 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“
单个元素
ID
主要指的是我们定位元素属性主要是以ID的方式来进行定位,ID一般都是唯一的,当开发同学某些时候为了保持这种唯一性,使用了动态的ID方式,其实解决的思路是非常简单的,那就是xpath的解决思路了。这地方我们还是聚焦于ID的属性定位方式,百度搜索输入框的ID源码
'''id:每个元素属性的ID都是唯一的''' driver=webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(3) #定位到百度搜索输入框,元素属性时ID send keys():输入内容 driver.find_element(By.ID,'kw').send_keys('无涯 接口测试') /////// time.sleep(3) driver.find_element(By.ID,'su').click() time.sleep(3) driver.close()
NAME
下来是以name的属性来进行定位和具体的操作,还是从上面的源码得到它的name为wd
driver=webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(3) driver.find_element(By.NAME,'wd').send_keys('无涯 接口测试') time.sleep(3) driver.find_element(By.ID,'su').click() time.sleep(3) driver.close()
CLASS
当出现中间有空格时,则是不规范的,不必使用
在属性里面也就是class,还是从上面的HTML的源码里面可以知道,它的class为s_ipt
driver=webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(3) driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('无涯 接口测试') time.sleep(3) driver.find_element(By.ID,'su').click() time.sleep(3) driver.close()
XPATH
当一个元素实在在定位不到的时候,也就是id,name,class都不可以的时候,可以使用xpath或者是css的模式,我个人一般推荐可以使用xpath的方式,那么获取元素属性的xpath怎么获取了,下面为具体说下操作步骤:
1、鼠标到需要操作的元素属性
2、右键,点击Copy
当然如果是动态的ID,获取到的xpath也是错误的,那么这个时候怎么解决问题了?解决的思路就是点击Copy full Xpath,这样获取到的xpath是完整的,就不会
因为动态的ID而导致错误。下面还是以百度搜索输入框,获取到它的xpath为://*[@id="kw"]
''' xpath:使用路径 当使用xpath的时候,ID是动态的,那么使用fullpath(被定位元素属性的完整路径) ''' driver=webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(3) driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('无涯 接口测试') time.sleep(3) driver.find_element( By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input').click() time.sleep(3) driver.close()
CSS
使用css的定位操作方式与xpath的操作步骤都是一样的,只不过有点区别的是在点击Copy后,需要点击的是Copy selector
百度搜索输入框获取到它的css为#kw,那么就以css的方式来演示这部分的测试实战代码
''' CSS:基于样式 ''' driver=webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(3) driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('无涯 接口测试') time.sleep(3) driver.find_element( By.CSS_SELECTOR, '#su').click() time.sleep(3) driver.close()
超链接
在页面的交互种如果存在超链接,可以使用的方法为find_element_by_link_text,比如在百度首先我们需要点击新闻,那么就可以使用方法来进行定位了
一般而言在a标签里面的,我们都可以理解为超链接,就可以使用该方法来进行具体的操作了,针对点击新闻的超链接测试代码为:
'''超链接''' driver=webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(3) #精确超链接匹配 # driver.find_element(By.LINK_TEXT,'新闻').click() # time.sleep(3) #模糊匹配 driver.find_element(By.PARTIAL_LINK_TEXT,'闻').click() time.sleep(3) driver.close()
那么把它可以理解为也是针对超链接的定位方式,不过它可以使用模糊匹配的原则,这个怎么理解了,比如点击新闻,我们只可以使用一个关键字“闻”,下面还是点击新闻的超链接,但是使用模糊的方式
实现精确匹配和模糊匹配,都会跳转
TAGNAME
获取一个网页,然后输入admin测试
百度搜索输入框,它的标签是input,那么针对这种我们可以使用标签的方式来进行,使用到的方法
'''tagname''' driver=webdriver.Chrome() driver.get('file:///C:/Users/85425/Desktop/tagTest.html') time.sleep(2) driver.find_element(By.TAG_NAME,'input').send_keys('admin') time.sleep(3) driver.close()
多个元素
''' 元素定位的分类: 1、单个元素定位:find_element() 2、多个元素定位:find_elements() 有单个为什么还有多个? 这是因为,当开发写的ID,name,class_name一模一样的时候,这个时候无法区分, 那么只能使用多个元素定位的方式。 多个元素定位方式使用? 它获取的对象是一个列表,我们可以被定位的元素属性在列表中是第几位,根据它的 索引信息来定位它。 ''' driver=webdriver.Chrome() driver.get('http://www.baidu.com') time.sleep(2) tags=driver.find_elements(By.TAG_NAME,'input') tags[7].send_keys('admin') time.sleep(3) driver.close()
标签:定位,Selenium3,元素,driver,find,sleep,测试,time,ID 来源: https://www.cnblogs.com/Aurora--1/p/16689798.html