selenium - Appium/WinAppDriver 无法找到上下文菜单 - 但仅在某些机器

我正在 Windows 10 上使用 Appium/Winappdriver 运行一组自动化 UI 测试。测试框架是使用 mstest 在 Visual Studio 2017 中编译的。

我遇到的问题是使用右键单击打开上下文菜单,然后从结果菜单中选择一个元素的测试。在本地,它有效。它也适用于我们的远程 CI/CD 机器。但是,它不适用于该项目的其他两个开发人员,我们花了两个工作日试图找出原因,但没有结果。

我们有相同的 Windows 版本(Windows 10,版本 1903),我们有相同的 Visual Studio 2017(我们也用 2019 试过,运气不好),我们有相同的显示器分辨率(1920 x 1080),我们是针对相同的 .NET 框架 (4.72),我们有相同的 WinAppDriver 等。

其他一切正常。但是,当 UI 测试到达该上下文菜单时,测试失败并显示错误“使用给定的搜索参数无法在页面上找到元素。”

我使用 WinAppDriver UI Recorder 找到元素的 XPath。我们还在其他用户的机器上使用它并确认,就 UI 记录器而言,两台机器上的路径是相同的。

失败的具体调用:

Session.FindElementByXPath("/Pane[@ClassName=\"#32769\"][@Name=\"Desktop 1\"]/Menu[@ClassName=\"#32768\"][@Name=\"Context\"]/MenuItem[@Name=\"" + itemName + "\"]");

我机器上的 WinAppDriver 调用(成功):

{"using":"xpath","value":"/Pane[@ClassName=\"#32769\"][@Name=\"Desktop 1\"]/Menu[@ClassName=\"#32768\"][@Name=\"Context\"]/MenuItem[@Name=\"New Location\"]"}
HTTP/1.1 200 OK
Content-Length: 125
Content-Type: application/json

{"sessionId":"8970FDC1-E869-4304-A87D-D8F2CB711EA2","status":0,"value":{"ELEMENT":"42.856234.4.-2147483646.8140.18614751.1"}}

在其他用户的机器上进行相同的调用(失败):

{"using":"xpath","value":"/Pane[@ClassName=\"#32769\"][@Name=\"Desktop 1\"]/Menu[@ClassName=\"#32768\"][@Name=\"Context\"]/MenuItem[@Name=\"New Location\"]"}
HTTP/1.1 404 Not Found
Content-Length: 139
Content-Type: application/json

{"status":7,"value":{"error":"no such element","message":"An element could not be located on the page using the given search parameters."}}

同样,其他一切正常。其他使用右键单击上下文菜单的 UI 测试工作得很好。只有这个特定区域失败了。

到目前为止我尝试了什么:

  1. 在调用之前使用 Thread.Sleep 强制等待很长时间
  2. 用 DefaultWait 包装调用并在几秒钟内轮询它以查看该元素在此期间是否可用。
  3. 当抛出“找不到元素”时,重试最多设置的次数以找到该元素。
  4. 大量重复检查以确保我们使用相同版本的代码、相同的库、相同的 nuget 包等。
  5. 尝试更广泛的定位器 ( Session.FindElementByName(itemName); )

最让人头疼的是,当我们使用 UI Recorder 检查时,元素就在那里。当我们检查我的机器或远程构建机器时,WinAppDriver 可以正常找到它。但出于某种原因,WinAppDriver 在我同事的机器上找不到它。

最佳答案

这确实是一个特殊的问题。

我想在这里排除 XPath 选择器作为潜在问题的可能性。根据您的语法,看起来您使用的是绝对 XPath。根据情况,这些可能非常脆弱。并不是说这是根本问题,但我想尝试使用不同的选择器来排除这种情况。

{"using":"xpath","value":"//MenuItem[@Name=\"New Location\"]"}

使用相对 // 符号告诉您的路径在页面上的任何地方查看,而不是沿着特定路径向下查看元素本身。

试一试,如果有帮助请告诉我。

关于selenium - Appium/WinAppDriver 无法找到上下文菜单 - 但仅在某些机器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58192663/

相关文章:

node.js - nodemailer 不发送邮件,给出 250 ok

selenium - 登录网站时如何使用 puppeteer/selenium 重用保存的凭据/密码

bash - 如何使用 Shell 脚本在 mac 中覆盖环境变量

javascript - 使用 React Hook 应用多个 Context 的好方法

flutter - 如何使用我的整个应用程序在 TabBarView 中创建可滚动的内容?

angular - 重新加载页面后保持元素位置 - 拖放 cdk Angular 7

visual-studio-code - Prettier 在 React Code 中不工作并在状

python - 如何在 keras 中训练顺序模型,给出一个列表作为输出和输入?

android-studio - Android studio 在执行 lint 时找不到 kotl

reactjs - Jest 性能问题