Appium WinAppDriver 和 Selenium 4

2024-06-24

我正在努力使用 get WinAppDriver 打开应用程序,我的 Maven 导入如下:

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.6.0</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
            <version>7.9.0</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-testng</artifactId>
        <version>7.9.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.github.javafaker</groupId>
        <artifactId>javafaker</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.23.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.appium</groupId>
        <artifactId>java-client</artifactId>
        <version>8.2.1</version>
    </dependency>

我使用以下代码打开应用程序:

  WindowsDriver adminApp = null;
    DesiredCapabilities winCap = new DesiredCapabilities();
    winCap.setCapability("app", "C:\\Program Files\\Traka\\Traka Web Admin\\TrakaWebAdmin.exe");
    winCap.setCapability("ms:experimental-webdriver", true);
    winCap.setCapability("platformName", "windows");
    winCap.setCapability("automationName", "windows");
    adminApp = new WindowsDriver(new URL("http://127.0.0.1:4723/"), winCap);

每次我运行这个我都会收到以下错误:

{"status":100,"value":
 {"error":"invalid argument","message":"Bad capabilities. Specify either app or appTopLevelWindow to create a session"}}

但是,当我将硒版本更改为:

<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>

我可以打开应用程序,我不确定我是否遗漏了什么,有人可以帮忙吗?


您能够获得 WinAppDriver 以使用 Selenium 打开应用程序的原因v3.141.59但不适合硒v4.6.0这是由于 Appium java 客户端主要版本 7 和 8 之间的一些重大更改造成的。

根据v7 到 v8 迁移指南 https://github.com/appium/java-client/blob/master/docs/v7-to-v8-migration-guide.md#strict-w3c-specification-compatibility从W3C规范兼容性角度来看:

  • Java 客户端现在支持 Selenium 4,这也意味着它严格符合 W3C。旧的基于 JWP 的服务器不再受支持,并且它 将无法与他们一起使用新的客户端版本。 在 Appium 驱动程序上强制使用 JWP 协议的功能 不再有任何影响了。
  • 提供驱动程序创建功能的推荐方法是使用继承自的特定选项构建器基本选项 班级 https://github.com/appium/java-client/blob/master/src/main/java/io/appium/java_client/remote/options/BaseOptions.java。 例如XCUI测试选项 https://github.com/appium/java-client/blob/master/src/main/java/io/appium/java_client/ios/options/XCUITestOptions.java创建 XCUITest 驱动程序实例或UiAutomator2选项 https://github.com/appium/java-client/blob/master/src/main/java/io/appium/java_client/android/options/UiAutomator2Options.java创建 UiAutomator2 驱动程序实例。如果没有 驱动程序特定的选项类,然后使用 BaseOptions 构建器作为基类来定义您的功能或 请求驱动开发者添加一个。不要使用 DesiredCapability 在 W3C 上下文中用于此目的的类。查看单元 测试 https://github.com/appium/java-client/blob/master/src/test/java/io/appium/java_client/drivers/options/OptionsBuildingTest.java有关如何构建驱动程序选项的更多示例。

另外在讨论中无法启动与 WinAppDriver 的会话 https://github.com/appium/java-client/issues/1592#issuecomment-1109188197 @Appium https://github.com/appium维护者@KazuCocoa 提到:

WinAppDriver 目前需要基于 selenium v​​3 的客户端,因为 Selenium v​​4 需要 WinAppDriver 尚不支持的 W3C 规范协议。

进一步讨论中支持 Selenium 4 https://github.com/microsoft/WinAppDriver/issues/1839 @pm90pl确认的:

是的。因此,当前版本与 W3C WebDriver 标准不兼容,这导致它与 Selenium 4 不兼容。WAD 没有明确的路线图,而且它不是开源的,因此您必须自己处理。 在不检查 WAD 兼容性的情况下升级 Selenium 是一个错误。对不起。


结论

执行基于 WinAppDriver 的测试的唯一可行选项是向后移植到硒 v3.141.59

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Appium WinAppDriver 和 Selenium 4 的相关文章

  • 如何使用 Windows 上运行的 Java 服务检测用户活动?

    我的目标是使用 Java 创建一个系统监控应用程序 我想知道用户何时在 Windows PC 上进行活动 结果会是这样的 8 00 8 15 活动 9 12 10 29 活动 12 24 15 34 活动 我对任何其他信息 按下了哪个键 使
  • 扩展 CrudRepository (Spring) 时是否需要 @Repository 注解?

    public interface CarRepository extends CrudRepository
  • 在 ruby​​ on Rails 中运行测试时具有默认端口

    我正在尝试运行我的测试rake spec我使用 rspec capybara 和 selenium 作为网络驱动程序 问题是 当我尝试运行规范时 它每次都会在不同的端口中启动测试环境 我不希望这种情况发生 因为它会扰乱我的 Facebook
  • Hibernate统计打印HQL:null

    我是使用休眠的新手 我打开了统计信息 与普通的 HQL 查询一起 我得到了许多这样的统计信息 INFO Statistics HQL null time 1724ms rows blah 有人可以以任何方式帮助我为什么null查询大约需要
  • 限制执行第三方软件的线程的权限

    我正在开发一个基于 Eclipse 的应用程序 能够执行第三方组件 不是 eclipse plugin 每个组件都有一个列出权限 以及相应动机 的自定义描述符 这样最终用户可以决定是否执行它 组件在单独的线程中执行 如何根据描述符限制这些线
  • Spring批处理2.2 JavaConfig

    我正在尝试让 Spring Batch 2 2 与 JavaConfig 一起使用 如今他们有一个 EnableBatchProcessing设置很多东西的注释 默认情况下 该注释使用数据源作为其作业数据 但我们不想保存此数据 也不想为其创
  • Apache HttpClient 4.x 在上传较大文件时表现奇怪?

    我正在使用 java 和 scala 开发和测试一个简单的客户端 服务器应用程序 The server是基于com sun net httpserver HttpServer并允许使用 POST 和 PUT 操作通过基本的 RESTful
  • Spring Data JPA 规范继承

    我有三个实体 如下所示 Entity Inheritance strategy InheritanceType JOINED DiscriminatorColumn name type public abstract class Emplo
  • 如何从资源服务器中的 Spring Security OAuth2 Boot 中提取声明?

    我有一个使用 Net Core 内置的授权服务器身份服务器4 https identityserver4 readthedocs io en latest 它正在按预期工作 从 Node Js 和 Net 授权客户端和资源 现在我尝试添加
  • 使用 Hashmap 理解两个或多个键

    我的哈希图有问题 在我的哈希映射方法中 我希望有两个或多个关键字作为键 而不是只有一个 例如 我希望用户输入一些包含两个或多个关键字的句子 假设 教授姓名 是关键字 例如 String temp3 instructor teacher me
  • 识别包含本机方法实现的库文件/源

    如何识别包含本机方法实现的库文件 Ex public native String intern 我在哪里可以找到实施 source code of String intern 方法 找到了答案String intern 与快速谷歌搜索 ht
  • 如何显示 javadoc 代码块中的泛型?

    我有一个 javadoc 代码块 我想在其中编写一个包含泛型的代码示例 如下所示 public interface SomeInterface
  • 在同步子句中抛出异常的副作用?

    从同步子句中抛出异常是否有任何不清楚的副作用 锁会发生什么情况 private void doSomething throws Exception synchronized lock doSomething 我没有看到任何副作用 The 锁
  • Java - 动态创建子类

    我想以编程方式创建一个子类 我想我的选择很少 Javassist CGLib BCEL 或 ASM 用例是一个应用程序的内部是面向类的 而扩展是基于类的 因此 我不能将单个类作为由外部化脚本驱动的多个扩展的基础 现在 我该怎么做呢 我找到了
  • 从java类文件获取apache webcontents文件夹的绝对路径[重复]

    这个问题在这里已经有答案了 需要在动态 Web 应用程序内获取 java 类文件中的绝对路径 实际上我需要获取 apache webapps 文件夹的路径 部署 webapps 的位置 e g apache root webapps my
  • allure2 侦听器在控制台中输出步骤

    我正在使用 Allure2 和 TestNG 我想编写自己的侦听器 在控制台输出中打印 Steps 我在 allure 中看到了 StepLifecycleListener 接口 但我无法在 TestNg 中实现此侦听器 有什么指点吗 Ov
  • 在 Ubuntu 上的 Tomcat 中加载共享本机库

    如何在 Ubuntu 上的 Tomcat6 中加载共享库 我创建了一个名为 libawragrids so 的库 awragrids 并将其放置在 var lib tomcat6 shared 我在调用启动 tomcat 的终端中设置了以下
  • GridLayout 中的 JLabel

    如何添加JLabel出于GridLayout 我有一个 8x8 网格布局 Container content getContentPane content setLayout new GridLayout 8 8 2 2 for int f
  • Tomcat 中 JNDI 的 Java Mail API 配置文档

    我花了几天时间弄清楚如何通过 JNDI 在 Tomcat 中配置 javax mail Session有认证 现在我明白了 但只是在深入研究代码之后 这次我看到了有史以来最糟糕的代码 javax mail Service connect S
  • JFrame.repaint() 和 JPanel.repaint() 之间的区别

    谁能解释一下两者之间的区别JPanel repaint 方法和JFrame repaint 方法 我想两者都调用paintComponent JPanel 中的方法 请澄清 谢谢 Calling repaint 在任何组件上都会向重绘管理器

随机推荐

  • CSS 边框干扰绝对定位

    编辑 澄清 box sizing border box 似乎不适用 因为我使用的是绝对定位 下面的代码说明了我的问题 我使用绝对定位 因为我发现这对于基于流的布局来说更加棘手 但我愿意接受建议 我想要的是任意元素的边界 without影响节
  • platform.linux_distribution() 已弃用 - 有哪些替代方案?

    从 Python 3 5 开始platform linux distribution https docs python org 3 5 library platform html platform linux distribution已弃
  • 使用tensorflow和keras的不同训练结果

    Intro 我随机创建训练数据X形状为 1000 10 对于标签Y 它总是等于第一个元素X特征 例如 认为x1 0 1 0 2 0 3 0 9 theny 0 1 使用以下代码创建的数据集 from numpy random import
  • 是我的问题还是 Rails 和 Django 在 Windows 上安装困难?

    我尝试让这些框架在 Windows Vista 上运行几天 但没有成功 每次我认为我让它们工作时 我都会遇到一些涉及 PostgreSQL 或 MySQL 设置的随机错误 或者路径被搞砸了 或者一些其他命令行错误 未识别为内部或外部命令 或
  • 在 Java 中将希腊语转换为大写

    我想做的事情相当简单 String example Mary Had A Little Lamb String upper example toUpperCase 在希腊语中 只有大写单词的第一个字母才应包含重音字符 upper conta
  • 为什么 tkinter 输入验证需要调用 register() ?

    def check the input only allows digits only inp A function for validating the input the purpose of this is to let the us
  • 如何将产品添加到现有且已付款的 Woocommerce 订单中?

    我有一个 WooCommerce 网站 我的一位客户在该网站上购买了产品和电缆 该客户购买了一根与其他产品不兼容的电缆 并询问我们是否可以向他运送价格相同的兼容电缆 也许这是一个愚蠢的问题 但我如何编辑已付款的订单 删除不兼容的电缆并添加正
  • 将 NSDate 转换为 NSString

    我如何转换 NSDate to NSString所以只有这一年 yyyy 格式是输出到字符串吗 怎么样 NSDateFormatter formatter NSDateFormatter alloc init formatter setDa
  • 如何在 Swift 中使用 AXObserverAddNotification?

    如何在 Swift 中使用 AXObserverAddNotification 来检测 UI 更改 Obj C 中有一个很好的答案 我的应用程序如何检测另一个应用程序窗口的更改 https stackoverflow com questio
  • 如何使用 Route53 从一个顶级域重定向到另一个顶级域

    如果我的术语在这里不太正确 请道歉 我的域 albunack net 在 Route53 上运行良好 我还在 Route 53 控制下拥有域 albunack com 我希望对 albunack com 的任何请求都重定向到 albunac
  • 引用初始化和直接绑定与间接绑定

    考虑以下情况 struct A operator int int x A 规范说在http eel is c draft dcl init ref 5 http eel is c draft dcl init ref 5关于引用绑定是直接还
  • 版本控制 rpm 规范文件

    我正在配置一台构建机器来为大量非常相似的项目生成 rpm 每个项目的规范文件在名称上以及有时在依赖项和其他属性上都略有不同 每个项目都有自己的 git 存储库 其中包含项目文件 这些规范文件仅存在并且实际上仅对构建系统本身有用 每个项目都可
  • 调试目标调用异常

    我正在使用 Visual Studio 2008 C Express Edition 并且正在尝试调试由于我触发的事件而发生的 TargetInitationException 我的问题并不是专门针对此异常 因此我没有包含有关此异常的任何详
  • 当只有一个对象时将XML转换为Json数组Java

    我有一个 XML 我需要将其转换为 JSON 当在 XML 中我们有多个元素时 它会创建正确的 jsonArray 但是当单个元素未创建数组时 任何人都可以帮助我如何在单个元素的情况下获取数组 String TEST XML STRING
  • 取消选中复选框后,输入类型文本字段会重复

    我有名为名字 姓氏和电子邮件的复选框 我必须在单击复选框后显示输入类型 或者如果未选中 则删除该复选框 另外 我试图获取选中的复选框的标签 但我没有得到它 你愿意帮我吗 document ready function add text ty
  • 为什么人们在代码中使用魔法值而不是 null ?

    我在遗留代码和一些 NET 开源项目中看到了这一点 我无法想象这样做的理由 对我来说 仅使用 null 似乎更容易 Example public class Category int parentID bool HasParent get
  • 一个Api可以设置两个认证吗?身份服务器4

    我构建了一个身份服务器 并为客户端提供了两个 grant types 混合和密码 现在 他们每个人都可以独立获取访问令牌 如果同时添加它们 只是混合工作 密码模式可以获取访问令牌 但访问 api 时需要使用不记名令牌 我被重定向到混合登录页
  • 从命令行构建 ASP.NET 解决方案?

    如何从命令行构建 ASP NET Web 应用程序 在 bat 文件中尝试此操作 将 v4 0 30319 替换为适当的版本 CD C Windows Microsoft NET Framework v4 0 30319 msbuild C
  • 如何强制 Theano 在 GPU 上并行化操作(测试用例:numpy.bincount)

    我正在寻找使用 GPU 加速 bincount 计算的可能性 参考numpy中的代码 x new numpy random randint 0 1000 1000000 timeit numpy bincount x new 100 loo
  • Appium WinAppDriver 和 Selenium 4

    我正在努力使用 get WinAppDriver 打开应用程序 我的 Maven 导入如下