当前位置: 首页 > article >正文

【UI自动化】从WebDriver看Selenium与Appium的底层关联

Selenium与Appium单纯从字面上来看都有后缀ium,一个是Web端页面自动化工具,一个移动换页面自动化工具,他们两者之间有没有关联呢,是不是有底层相同的地方呢?

我们先来上代码看下,如何使用Selenium WebDriver和AppiumDriver进行测试,并演示了它们之间的联系:

//使用Selenium WebDriver测试一个Web页面
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
    public static void main(String[] args)                             
      {System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      driver.get("http://www.baidu.com");driver.quit();
    }
}

//使用AppiumDriver测试一个Android应用程序
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
public class AppiumTest {
    public static void main(String[] args) throws Exception {
        DesiredCapabilities capabilities = new                 
        DesiredCapabilities();capabilities.setCapability("deviceName", "Android             
        Emulator");capabilities.setCapability("appPackage", 
    "com.example.android.contactmanager");capabilities.setCapability("appActivity", ".ContactManager");capabilities.setCapability("platformName", "Android");URL url = new URL("http://127.0.0.1:4723/wd/hub");AndroidDriver driver = new AndroidDriver(url, capabilities);driver.quit();}
}

上面的代码演示了如何使用Selenium WebDriver测试一个Web页面,并且使用Chrome浏览器来执行。另外一个代码演示了如何使用AppiumDriver测试一个Android应用程序,并且使用模拟器作为测试设备。这两个测试工具都是基于WebDriver接口实现的,其中Selenium WebDriver用于控制浏览器进行测试,AppiumDriver用于控制移动设备进行测试,同时它们都遵循了JSON Wire Protocol通信协议进行通信。

底层代码中的webdriver在两者的作用

在底层代码实现中,Selenium和Appium之间的关联主要有两个方面:一是Selenium WebDriver提供了底层的浏览器控制机制,而AppiumDriver基于WebDriver的API实现了移动设备控制的能力;二是Appium利用了Selenium WebDriver中的JSON Wire Protocol通信协议来实现与Appium Server之间的通讯机制。

1. Selenium WebDriver提供底层的浏览器控制机制

Selenium WebDriver通过控制浏览器的驱动程序来模拟用户在浏览器上的各种操作,包括点击、输入、跳转等等。WebDriver通过与浏览器内部的JavaScript引擎进行交互,在Web页面中注入JavaScript脚本,再通过DOM结构操作实现对Web页面的自动化控制。

在Appium的底层实现中,AppiumDriver继承自Selenium WebDriver,借助了WebDriver提供的低层次浏览器控制机制实现了对移动设备的控制。除此之外,Appium还通过自己的API来实现了移动设备中特有的功能,如截图、定位、手势操作等等。

2. 利用JSON Wire Protocol通信协议实现通讯机制

Selenium WebDriver和AppiumDriver之间的通讯采用了JSON Wire Protocol通信协议,它是一种轻量级且简单易学的协议,可以帮助实现不同语言和平台之间的通信。在实际测试中,Selenium WebDriver和AppiumDriver都需要与相应的DriverServer进行通讯,而这些DriverServer则会向应用程序发送命令来控制浏览器或移动设备。

JSON Wire Protocol协议中包含了三个部分:请求(Request)、响应(Response)、错误(Error)。它采用HTTP协议进行通讯,利用RESTful风格来定义不同的请求类型,并使用JSON格式来传输数据。例如,发送一个点击链接的请求,请求的格式如下:

{"sessionId": "1234567890","command": "click","target": "link text","value": "Example Link"
}

其中sessionId是对话的唯一标识符,command是请求的类型,target是要执行的操作目标,value是要输入的值。这个请求将被应用程序解析并执行相应的操作,然后返回相应的结果。

Appium利用WebDriver定义的JSON Wire Protocol通信协议,实现了与移动设备的通讯机制。Appium Server将接收到的JSON字符串在本地进行解析,然后再发送给移动设备上的DriverServer执行相应的操作。DriverServer会解析接收到的指令,并将操作执行在移动设备上。例如,发送一个点击按钮的请求,请求的格式如下:

{"sessionId": "1234567890","command": "click","element": "//button[@text='Submit']"
}

其中sessionId是对话的唯一标识符,command是请求的类型,element是要点击的按钮的标识符。这个请求将被Appium Server解析,并发送给移动设备上的DriverServer执行相应的操作,然后再返回结果。

通过上面代码及底层实现的逻辑,我们可以看得出来开selenium和appium都是通过webdriver来实现对页面元素的驱动,这两个又有一些区别:

Selenium和WebDriver

Selenium是一款自动化测试框架,可以模拟用户在浏览器上的交互操作,它可以完成如下的测试任务:

1. 测试Web应用程序的UI功能和行为。

2. 测试Web应用程序的功能和性能。

3. 模拟用户在Web应用程序上的交互行为。

Selenium的最大特点是可以跨浏览器执行测试,支持多种语言编写测试脚本。在实际测试中,可以使用Selenium WebDriver来驱动浏览器进行测试。

WebDriver是Selenium的一个子项目,是一系列API接口的集合,可以直接通过Web浏览器驱动来控制浏览器完成各种测试任务。WebDriver直接操作浏览器的DOM结构,模拟用户的操作,实现自动化测试的效果。WebDriver支持多种语言(如Java、Python、Ruby等)的编写,同时还支持多种浏览器(如Chrome、Firefox、IE等)的执行。

Appium和WebDriver

Appium是一款自动化测试工具,它可以模拟真实的用户行为,在模拟器和真实设备上执行测试任务。Appium支持多种移动操作系统(如IOS、Android等)的测试,并可以通过多语言(如Java、Python、Ruby等)进行编写。

类似于Selenium中的WebDriver,Appium也有自己的WebDriver,称为AppiumDriver。AppiumDriver是WebDriver的一个子类,用于控制移动设备上运行的应用程序。与WebDriver相同,AppiumDriver也支持多种平台和语言编写的自动化测试脚本。

在底层代码实现中,Selenium WebDriver提供了底层的浏览器控制机制,而AppiumDriver基于它的API实现了移动设备控制的能力。同时,它们都采用了JSON Wire Protocol通信协议来实现与DriverServer之间的通讯机制。对于测试工程师来说,了解Selenium和Appium之间的关联可以更好地理解自动化测试的底层实现,并且可以根据实际需求来选择合适的测试工具进行测试。

几点实用建议:

1. 在使用Selenium和Appium进行测试时,需要先了解目标浏览器或移动设备的特性和限制。这样才能编写出可靠的测试脚本和有效的测试用例。

2. 学会使用Selenium WebDriver和AppiumDriver提供的API方法和函数,在测试过程中可以更轻松地对页面元素和移动设备进行操作。

3. 对于Selenium WebDriver和AppiumDriver提供的代码接口,需要进行适当的封装和抽象,以便在编写测试脚本时更加高效和灵活。

4. 在实际测试过程中,需要配置相应的DriverServer和测试环境。尝试不同的配置组合,可以更好地发现测试用例中的缺陷和问题。

5. 学习JSON Wire Protocol通信协议和RESTful风格的API设计,可以帮助理解Selenium WebDriver和AppiumDriver之间的关联,并实现自己的通讯机制。

总之,掌握Selenium和Appium之间的底层关联可以更好地理解自动化测试的底层实现,提高测试效率和测试质量

附录:两个框架和接口供进一步参考

Selenium  API 

Appium 自动化框架:


http://www.kler.cn/a/450348.html

相关文章:

  • 重生之我在异世界学编程之C语言:深入预处理篇(上)
  • 某科技局国产服务器PVE虚拟化技术文档
  • 利用Circuit JS1再学学电子方面的知识(硬件)
  • centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
  • 数据库操作【JDBC HIbernate Mybatis】
  • mapbox基础,加载mapbox官方地图
  • 【python 逆向分析某有道翻译】分析有道翻译公开的密文内容,webpack类型,全程扣代码,最后实现接口调用翻译,仅供学习参考
  • SQL面试题——奖金瓜分问题
  • ChatGPT与Postman协作完成接口测试(一)
  • 处理字体图标、js、html及其他资源
  • 精读 84页华为BLM战略规划方法论
  • 概率论得学习和整理32: 用EXCEL描述正态分布,用δ求累计概率,以及已知概率求X的区间
  • css一道光闪过动效
  • 鸿蒙开发-ArkTS的ContainerSpan组件
  • 二进制部署k8s
  • Vite +Vue3打包生产环境去除项目中的console.log
  • Linux C/C++编程-线程退出时的清理机会
  • 易语言 OCR 文字识别
  • LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)
  • 数据结构-串-顺序结构实现
  • 如何使用vscode解决git冲突
  • 【微信小程序】微信小程序中的异步函数是如何实现同步功能的
  • C# 异步编程与多线程简析
  • 【python】装饰器
  • 云端地球模型标注如何添加?
  • Rasa框架的优点和缺点