1

我是自动化新手,我正在尝试使用带有 C# 的 WinAppDriver 自动化 WPF 应用程序。我能够加载应用程序,但在尝试使用给定的搜索参数查找具有 Name/AccessibilityId 的元素时出现类似 {"An element could not be located on the page using the given search parameters."} 之类的错误,即使在保持等待时间后也是如此。

见下文:

POST /session/09551C9F-CF20-4C2B-A900-F17D2483F9D8/element HTTP/1.1
Accept: application/json, image/png
Content-Length: 45
Content-Type: application/json;charset=utf-8
Host: 127.0.0.1:4723

{"using":"accessibility id","value":"TxtPwd"}
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."}}

我不知道发生了什么。有什么建议么?

我确实喜欢 - 通过检查工具检查元素和元素的自动化 ID/名称 - 将开发人员模式设置为活动 - 在找到元素之前等待时间

 var aDesiredCapabilities = new DesiredCapabilities();
             aDesiredCapabilities.SetCapability("app", @"PathToApplication");
             aDesiredCapabilities.SetCapability("deviceName", "Windows 10");

             var aWindow = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), aDesiredCapabilities);
             aWindow.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

             aWindow.FindElementByAccessibilityId("TxtPwd").SendKeys("qwerty");
             aWindow.FindElementByAccessibilityId("TxtUser").SendKeys("123456");
             aWindow.FindElementByAccessibilityId("Clear").Click();

             aWindow.FindElementByAccessibilityId("TxtPwd").SendKeys("qwerty");
             aWindow.FindElementByAccessibilityId("TxtUser").SendKeys("123456");
             aWindow.FindElementByAccessibilityId("Login");
4

3 回答 3

1

此用户名密码字段是否显示在弹出窗口中?

启动应用程序后,请在尝试访问应用程序 UI 元素之前短暂休眠。我建议以下。

System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));

更好的方法是使用 WebDriverWait 类的实例来等待元素被加载。

WebDriverWait wdv = new WebDriverWait(sessionAppWinForms, TimeSpan.FromSeconds(10));
var txtPwd = aWindow.FindElementByAccessibilityId("TxtPwd");
wdv.Until(x => txtPwd.Displayed);

更新:我建议使用 WinAppDriver UI Recorder 检查 UI 控件。最新版本无法在我的 PC 上运行,因此我建议使用 1.0 版。下载链接如下。 https://github.com/microsoft/WinAppDriver/releases/tag/UiR_v1.0-RC

WinAppDriver 只是一个帮助程序,您可以在不使用它的情况下创建自动化脚本。有时应用程序需要更长的时间才能启动,在这种情况下,您可能会使用 WebDriverWait 类来等待某些条件成立。例如,等待某个标签或文本框出现在屏幕上。您可以使用以下代码行无条件地等待几秒钟。

System.Threading.Thread.Sleep(5000);

我在 C# .Net 中使用 WinAppDriver 教授有关测试自动机的 Udemy 课程。详细介绍了这些概念。你可以在这里看到它。

于 2019-10-17T14:04:05.867 回答
0

如果您的应用程序以管理员身份运行,则 WinAppDriver 和 Inspect.exe 也必须以管理员身份运行。

于 2021-03-08T07:23:04.940 回答
0

该应用程序可能会在您aWindow范围之外的另一个窗口中打开。

您可以尝试创建桌面驱动程序会话并使用方法启动您的进程Process.Start()

于 2019-12-16T16:42:14.467 回答