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

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

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

java 复制代码
//使用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格式来传输数据。例如,发送一个点击链接的请求,请求的格式如下:

java 复制代码
{"sessionId": "1234567890","command": "click","target": "link text","value": "Example Link"
}

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

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

java 复制代码
{"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 自动化框架:

相关推荐
小白学大数据39 分钟前
构建企业级Selenium爬虫:基于隧道代理的IP管理架构
爬虫·tcp/ip·selenium
wdfk_prog2 小时前
Python脚本深度解析:实现基于YMODEM的单片机固件自动化升级
python·单片机·自动化
华科云商xiao徐3 小时前
详解Selenium爬虫部署七大常见错误及修复方案
爬虫·selenium
别来无恙1496 小时前
使用Python和Selenium进行Web自动化测试:从入门到实践
selenium·测试工具
Python大数据分析@6 小时前
python用selenium怎么规避检测?
开发语言·python·selenium·网络爬虫
ThreeAu.6 小时前
Miniconda3搭建Selenium的python虚拟环境全攻略
开发语言·python·selenium·minicoda·python环境配置
-KamMinG6 小时前
“从零到一:使用GitLab和Jenkins实现自动化CI/CD流水线”
自动化·gitlab·jenkins
中科岩创7 小时前
某排水涵洞结构安全自动化监测
人工智能·物联网·自动化
明达智控技术19 小时前
MR30分布式I/O模块在化工行业的应用
物联网·自动化