UI自动化知识点

一、 Selenium原理解析

1、 Selenium 介绍

  • 官网:https://www.selenium.dev/
  • WebDriver 用于操作浏览器
  • Selenium IDE: 是用来录制回放测试用例的工具
  • Selenium Grid: 分布式并发执行用例

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 与多窗口处理