《exe应用程序UI自动化》
前言:有很多公司做一些客户端的应用,每次发版都要耗费人力去手动回归比较费时,那么我们就想着去怎么去驱动人为的操作变为机器的操作过程,当然想着进行UI自动
那么我们就要考虑怎么去实现exe应用程序的自动化,此刻引来了几个问题值得我们去思考
1:exe的应用基于什么框架实现的其原理是什么?
2:怎么去自动启动壳
3:怎么去远程调式端口对壳子嵌入的网页进行做一些控制操作
一:应用程序的实现原理
1:exe的应用程序eg: electron 都是基于CEF开源的chromenium框架,selenium cef/electron(打包桌面程序)/qtwebbengine(渲染页面)
2:ChromeDriver和Selenium是用于自动测试基于Chromium的应用程序的工具,可以使用多种语言编写:Java,Python等
3:ChromeDriver使用DevTools远程调试协议(通过--remote-debugging-port=XXXX
传递给应用程序的命令行标志进行配置)与基于Chromium的应用程序进行通信进行一些页面元素的控制。
二:实例如下:
1:安装JDK,然后将安装的bin目录添加到PATH的环境变量中
2:创建一个自动化文件目录,用于存放启动的应用
3:下载符合版本的驱动 chromedriver (http://chromedriver.storage.googleapis.com/index.html)
4:创建一个maven项目 引入依赖的jar 第三方库
5:创建一个DriverInstant.java (启动应用程序,此类是一个封装好的)
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class DriverInstant {
private static WebDriver sInstant;//单例
public static WebDriver getInstant(){
if (sInstant==null) {
//设置webdriver.chrome.driver属性
System.setProperty("webdriver.chrome.driver", "D:/auto/chromedriver.exe");
//声明chromeoptions,主要给chrome设置参数
ChromeOptions options = new ChromeOptions();
// 添加用户配置文件路径
options.setBinary("D:/Ctrip/CtripAgentPlus/CtripAgentPlus.exe");
options.addArguments("remote-debugging-port=远程调试端口号");
//新建一个WebDriver的对象,但是New的是chrome的驱动 实例化chrome对象
sInstant = new ChromeDriver(options);
//WebDriver driver=new ChromeDriver();
sInstant.get("嵌入的页面链接");
System.out.println(sInstant.toString());
}
return sInstant;
}
}
原文地址:https://www.cnblogs.com/Fannfiy/p/12794211.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅入浅出 Java ConcurrentHashMap
- 「高并发通信框架Netty4 源码解读(五)」NIO通道Channel详解
- 图解一致性哈希算法,全网(小区局域网)最通俗易懂
- 「高并发通信框架Netty4 源码解读(六)」NIO通道之Socket通道
- 「高并发通信框架Netty4 源码解读(番外篇)」NIO实现大文件传输
- 「高并发通信框架Netty4 源码解读(七)」NIO通道之Selector选择器
- Python与seo工具脚本,360/搜狗相关搜索词采集源码参考
- 逐行阅读Spring5.X源码(八)Mybatis是如何利用MapperScan完成扫描的?
- KEDA|Kubernetes中基于事件驱动的自动伸缩
- 「高并发通信框架Netty4 源码解读(八)」NIO应用——聊天案例及Reactor线程模式
- 「kafka」kafka-clients,java编写生产者客户端及原理剖析
- 「kafka」kafka-clients,java编写消费者客户端及原理剖析
- Kubernetes:如何自动检测和处理弃用的API
- 逐行阅读Spring5.X源码(九)spring利用CGLIB实现动态代理原理剖析
- 逐行阅读Spring5.X源码(十)spring如何解决循环引用,bean实例化过程源码详解