一:什么是selenium?
selenium是一个应用在web端的应用程序的测试,selenium测试是直接应用在浏览器上,可支持的浏览器(chrome,Firefox,IE…)
selenium包含了:
selenium IDE(测试的录制;)
selenium Gird(测试的并行处理)
selenium webdriver(基于内核API完成对象的识别)
selenium的特点:
1、由程序控制浏览器进行操作,而不是手动操作浏览器
2、程序控制浏览器进行操作的时候,速度非常慢,所以要谨慎使用selenium
3、使用selenium控制浏览器的时候,需要下载浏览器驱动
4、selenium为开源 免费 但是更新速度没有浏览器快
二:selenium的安装
下载第三方库
打开dos窗口进行第三方库的下载pip install selenium
配置不同浏览器的驱动程序
首先将下载好的驱动程序对应相同的浏览器的版本
接着将浏览器的驱动放在python中script的目录下
最后重启一下
在此下载驱动:
chrome浏览器的驱动 : http://chromedriver.storage.googleapis.com/index.html.
firefox的驱动: https://github.com/mozilla/geckodriver/releases.
IE浏览器的驱动: http://selenium-release.storage.googleapis.com/index.html.
三:selenium的工作原理
selenium 的原理可以理解为 出租车 乘客 与司机之间的关系,一般来说,乘客上车之后要告诉司机他的目的地,司机知道后,再由车为载体将乘客拉到目的地。
在这里,我们将自动化测试脚本------>乘客
浏览器的驱动----->司机
浏览器------>出租车
二:GUI自动化的原理:
1.基于位置的模拟鼠标键盘的操作
2.基于图像识别的元素定位
3.基于元素本身的定位和操作
三:webdriver常见的定位方式
id find_element_by_id()
name find_element_by_name()
class_name find_element_by_class_name()
xpath find_element_by_xpath()
tag_name find_element_by_tag_name()
link_text find_element_by_link_text()
css_selector find_element_by_css_selector()
parital_link_text find_element_by_partial_link_text()
(定位方式的优先级:ID,具有唯一性的name ,class_name,link_text
xpath;图像识别或者坐标)
四:webdirver的基本使用方法
#1.先进行导包fromseleniumimportwebdriver#强制等待importtime#2.定义一个driver的变量driver=webdriver.Chrome()#3.打开浏览器,拿百度示例driver.get('https://www.baidu.com/')time.sleep(2)#4.进行测试print('test success')
以上就是webdriver的简单使用,那么我们要是想在搜索框内输入文字让他进行搜索该怎么操作呢?
#1.先进行导包fromseleniumimportwebdriver#强制等待importtime#2.定义一个driver的变量driver=webdriver.Chrome()#3.打开浏览器,拿百度示例driver.get('https://www.baidu.com/')time.sleep(2)#4.进行测试print('test success')#5.找到搜索框所对应的idvalue=driver.find_element_by_id('kw')#点击操作value.click()#填值value.send_keys('python')time.sleep(2)#6.点击搜索driver.find_element_by_id('su').click()#7.进行测试print('ok')
五:面试常问的问题
☆ selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
1.使用异常处理的方法:try…except
2.在对元素进行操作之前,进行点击,等待操作
3.给开发人员建议,给页面元素加上唯一的name/Id
☆ 在做自动化测试的时候,元素定位不上应该怎么处理?
安装驱动有问题,导致无法运行
不在同一个iframe里面。经常会遇到alert、frame和新的window,对于这种情况就需要切换frame窗口
(driver.switch_to_default_content())
点击速度过快,页面还没加载出来,这个时候再去找元素肯定是定位失败,在这个过程中我们需要设置强制等待。Time.sleep(3)
可以根据元素的其他属性来进行定位,例如尝试xpath,CSS这些;实在不行也可尝试根据相对关系定位,依据其附近的父节点,子节点、兄弟节点定位
☆ 启动浏览器的时候用的的是webdriver的那个协议?
http协议:超文本传输协议
☆ Webdriver的协议是什么?
The WebDriver Wire Protocol
☆ 用例在运行过程中经常会出现不稳定的情况,也就是这次可以通过,下次无法通过了,如何提高用例的稳定性?
time.sleep( )
driver.implicitly_wait(30)
多用 try 捕捉,处理异常
☆ Selenium中用什么函数判断元素是否存在?
isElementPresent
☆ 你觉得自动化测试最大的缺陷是什么?
不稳定
可靠性
不易维护
成本与收益
转载自https://blog.csdn.net/weixin_46164132/article/details/105037932