我正在 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 测试工作得很好。只有这个特定区域失败了。
到目前为止我尝试了什么:
最让人头疼的是,当我们使用 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 中训练顺序模型,给出一个列表作为输出和输入?