我是使用Appium进行C#桌面应用程序自动化的新手。我在屏幕上有一个用户名文本控件,上面设置了自动化ID。当我尝试单击用户名字段时,我收到错误消息:“无法完成元素命令,因为该元素不可指针或键盘交互。”
驱动程序. FindElementByAccessibilityId("UserNameTextBox")。点击();
如果我将元素添加到变量并检查其属性,我可以看到它被设置为Display=False,尽管它在屏幕上。我还注入了5秒的等待以确保这不是时间问题。
如果我尝试在下面的密码字段中使用相同的技术,它就有效。
做一些进一步的调试,我可以看到这有一个TagName of Control. Text
var userNameBox = driver.FindElementByAccessibilityId("UserNameTextBox");
这有一个控制的标签名称。编辑
var passwordBox = driver.FindElementByAccessibilityId("PasswordBox");
如果我使用检查器. exe,它会显示用户名控件的以下属性:
此代码成功找到元素并单击它:
driver.FindElementByClassName("TextBox").Click();
driver.FindElementByClassName("TextBox").SendKeys("joe bloggs");
但是此代码返回错误。
driver.FindElementByAccessibilityId("UserNameTextBox").Click();
driver.FindElementByAccessibilityId("UserNameTextBox").SendKeys("joe bloggs");
为什么?我宁愿使用辅助功能ID,在这个例子中屏幕上只有一个TextBox实例,但它对其他屏幕来说不是很可靠。
如果无法检查在测试环境中运行的应用程序,就不可能准确诊断导致您所描述的行为的原因。
让我们看看你知道什么:
由此我们可以假设驱动程序. FindElementByClassName("TextBox")
不等于驱动程序.FindElementByAccessibiltyId("UserNameTextBox")
。您现在需要弄清楚它们的区别。
我建议在定位两个元素并检查它们的不同之处后设置断点。它们很可能指向树中略有不同的元素。您可以将其与检查. exe结合起来,看看它们之间的关系。这应该为您提供确定如何使用可访问性ID来定位可点击元素所需的信息。