一、 Selenium原理解析
1、 Selenium 介绍
2、 Selenium 自动化测试
- Selenium 用于 Web 应用程序的 UI 自动化测试工具
- 可以跨平台(Mac/Linux/Windows)
- 支持所有主流浏览器,包括(Chrome/Chromium、 Firefox、 Internet Explorer、 Edge、 Opera 和 Safari)
3、 为什么能够支持这么多种浏览器
- Selenium WebDriver 是典型的 Server-Client 模式
- 浏览器厂商会提供驱动浏览器操作的中间件(WebDriver), 通过这个中间件可以直接驱动浏览器执行各种操作,比如点击,滑动, 输入,下拉等等
4、 Selenium 工作原理
5、 总结
Selenium的工作原理是:
selenium 之所以支持多浏览器,是因为不同的浏览器厂商会提供不同版本的驱动程序,来驱动浏览器模拟各种操作(比如滑动,点击,下拉等)。Selenium 在给中间件发送请求时,会遵循一个特定的协议(WebDriver Wire Protocol)进行通讯。
二、appium 原理解析
1、 Appium 介绍
- 官网:http://appium.io/
- 跨语言:Java、Python、nodejs 等
- 跨平台
- 移动端:Android、iOS
- PC 端:Windows、Mac
- 底层多引擎可切换
- 生态丰富,社区强大
2、 Appium 工作原理
3、 总结
Appium 的原理:
Appium 是典型的 C/S 架构模式的框架。第一次运行 Appium 测试代码,向 Appium Server 发送请求时,会传递一个 DesireCapability 对象,告诉 AppiumServer,被测试设备的一些信息,第一次请求完成,会创建一个 session 对象,随后会使用这个 session 对象完成对设备的操作(比如点击,输入等)
三、显式等待与隐式等待的区别
1、三种等待方式及其区别
类型 |
使用方式 |
原理 |
适用场景 |
直接等待 |
python:time.sleep(等待时间) ;Java:Thread.sleep();
|
强制线程等待 |
调试代码,临时性添加 |
隐式等待 |
python:driver.implicitly_wait(等待时间) ;Java:driver.manage().timeouts().implicitlyWait(等待时间);
|
在时间范围内,轮询查找元素 |
解决找不到元素问题,无法解决交互问题,也无法自定义等待条件 |
显式等待 |
python:WebDriverWait(driver实例, 最长等待时间).until(条件函数) ;Java:WebElement firstResult = new WebDriverWait(driver,最长等待时间).until(条件函数);
|
设定特定的等待条件,轮询操作 |
解决特定条件下的等待问题,比如点击等交互性行为,同时可以自定义等待条件 |
四、定位不到元素
1、如何判断一个页面上元素是否存在
通过查看当前页面dom,搜索该元素是否存在。如果是脚本自动化运行过程中,应该通过打印page_source,即可了解到该元素在运行过程中是否存在
2、 元素定位
问题 |
答案 |
Selenium定位方法有几种?分别是? |
八种定位方式,常用的为id、name、css、xpath |
如何通过子元素定位父元素? |
编写xpath定位 |
3、 元素操作
问题 |
原因 |
解决方案 |
一个元素明明定位到了,点击无效(也没报错),如何解决? |
异步加载js导致点击不到 |
循环点击该按钮,直到生效为止 |
|
app突然出现弹框,导致元素遮挡 |
通过添加黑名单异常处理解决 |
selenium 中隐藏元素如何定位,操作? |
隐藏元素可以直接定位,但是无法直接点击或者交互 |
使用js执行交互操作 |
|
如何获取app中的toast消息提示? |
toast闪过太快,不好定位 |
4、 元素定位不到
原因 |
解决方案 |
对应知识点 |
定位不正确 |
在console先测试定位是否正确 |
定位 |
页面还没有加载完成 |
添加死等验证,使用显示等待或隐式等待进行优化 |
隐式等待、显式等待 |
存在动态ID |
定位方式使用css或者xpath的相对定位 |
高级定位之css、xpath |
页面有iframe |
切换到iframe后定位 |
网页 frame 与多窗口处理 |
页面切换window |
切换到对应窗口后定位 |
网页 frame 与多窗口处理 |