提问者:小点点

尝试时出错。单击()-'无法完成元素命令,因为该元素不可与指针或键盘互操作'


我是使用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实例,但它对其他屏幕来说不是很可靠。


共1个答案

匿名用户

如果无法检查在测试环境中运行的应用程序,就不可能准确诊断导致您所描述的行为的原因。

让我们看看你知道什么:

  • 您可以使用类“TextBox”找到一个元素
    • 您可以成功单击元素
    • 当您尝试单击它时,会出现错误

    由此我们可以假设驱动程序. FindElementByClassName("TextBox")不等于驱动程序.FindElementByAccessibiltyId("UserNameTextBox")。您现在需要弄清楚它们的区别。

    我建议在定位两个元素并检查它们的不同之处后设置断点。它们很可能指向树中略有不同的元素。您可以将其与检查. exe结合起来,看看它们之间的关系。这应该为您提供确定如何使用可访问性ID来定位可点击元素所需的信息。