C# winappdriver无法';无法使用查找元素

C# winappdriver无法';无法使用查找元素,c#,appium-desktop,winappdriver,C#,Appium Desktop,Winappdriver,我是自动化新手,我正在尝试使用WinAppDriver和C#自动化WPF应用程序。我可以加载应用程序,但在尝试查找名为/AccessibilityId的元素时,即使在保持等待时间后,也会出现类似{“使用给定的搜索参数无法在页面上找到元素。”}的错误 见下文: POST /session/09551C9F-CF20-4C2B-A900-F17D2483F9D8/element HTTP/1.1 Accept: application/json, image/png Content-Length:

我是自动化新手,我正在尝试使用WinAppDriver和C#自动化WPF应用程序。我可以加载应用程序,但在尝试查找名为/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");
var aDesiredCapabilities=新的DesiredCapabilities();
aDesiredCapabilities.SetCapability(“应用程序”,@“应用程序路径”);
aDesiredCapabilities.SetCapability(“deviceName”、“Windows 10”);
var aWindow=新的Windows驱动程序(新Uri(“http://127.0.0.1:4723)的能力);
aWindow.Manage().timeout().ImplicitWait=TimeSpan.FromSeconds(5);
aWindow.FindElementByAccessibilityId(“TxtPwd”).SendKeys(“qwerty”);
aWindow.FindElementByAccessibilityId(“TxtUser”).SendKeys(“123456”);
aWindow.FindElementByAccessibilityId(“清除”)。单击();
aWindow.FindElementByAccessibilityId(“TxtPwd”).SendKeys(“qwerty”);
aWindow.FindElementByAccessibilityId(“TxtUser”).SendKeys(“123456”);
aWindow.FindElementByAccessibilityId(“登录”);

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

启动应用程序后,请在尝试访问应用程序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控件。最新版本在我的电脑上不起作用,因此我建议使用1.0版。下载链接如下所示。

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

系统线程线程睡眠(5000)


我在C#Net中教了一门关于WinAppDriver测试自动机的课程。详细介绍了这些概念。你会看到的

应用程序可以在
aWindow
范围之外的另一个窗口中打开


您可以尝试创建并使用方法启动进程。

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

您尝试过这些不同的方法吗?我尝试了FindElementByAccessibilityId和FindElementByName。其他的我没有。我希望它至少可以与FindElementByAccessibilityId一起使用。请尝试使用click()函数单击元素,而不是sendkeys。首先,您的元素是可交互的。element.enabled==true,element.displated==true。您需要关注的另一件事是,您正在右窗口上工作。我使用了元素的单击功能以及aWindow.findelementbaccessibilityid(“Login”)。click();但该语句(aWindow.FindElementByAccessibilityId(“Login”);)本身正在引发异常。按钮是可点击的。我试着保持Thread.Sleep(TimeSpan.FromSeconds(10));但它不起作用。我还尝试了window.Manage().Timeouts().ImplicitWait=TimeSpan.FromSeconds(5);而不是webdriverwait。不走运。阿尼尔,这个用户名/密码字段是否显示在弹出框中?如果是,则尝试使用“应用程序”、“根目录”创建桌面会话。找到包含凭据字段的窗口,并在该窗口上执行操作。不,这些用户名和密码是正常WPF页面上的两个控件。它实际上是一个简单的WPF应用程序,具有这些控件。而且,我已经用“app”、“Root”尝试了这个桌面会话,但没有成功。好的,WinAppDriver UI记录器显示了哪些控件属性?您是否使用“FindElementByXPath”方法尝试过UI记录器生成的XPath。我没有使用UI记录器。我只是在使用WinAppDriver并使用inspect工具获取控件的属性。