winappdriver找不到使用元素

时间:2019-10-16 11:12:45

标签: c# appium-desktop winappdriver

我不熟悉自动化,我正在尝试使用带有C#的WinAppDriver来自动化WPF应用程序。我能够加载该应用程序,但是在尝试使用具有Name / AccessibilityId的元素时,即使保持了等待时间,也遇到了{{“使用给定的搜索参数无法在页面上找到元素的错误。 >

参见下文:

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");

3 个答案:

答案 0 :(得分:0)

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

启动应用程序后,在尝试访问应用程序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课程。这些概念将详细介绍。您可能会看到它here

答案 1 :(得分:0)

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

您可以尝试创建desktop driver session并使用Process.Start()方法开始您的过程。

答案 2 :(得分:0)

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