我不熟悉自动化,我正在尝试使用带有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");
答案 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 也必须以管理员身份运行。