iOS UI 自动化 UIA Element.is Visible() 抛出过时的响应?
Posted
技术标签:
【中文标题】iOS UI 自动化 UIA Element.is Visible() 抛出过时的响应?【英文标题】:iOS UIAutomation UIAElement.isVisible() throwing stale response? 【发布时间】:2011-08-12 18:19:45 【问题描述】:我正在尝试在循环中使用 isVisible() 来为我的 ios UIAutomation 创建一个 waitForElement 类型的函数。当我尝试使用以下代码时,在弹出新屏幕时等待元素时失败。该元素显然存在,因为如果我在点击该元素之前执行延迟(2),它可以正常工作。其他人是如何做到这一点的,因为我不知所措......
这是我正在使用的 waitForElement 代码:
function waitForElement(element, timeout, step)
if (step == null)
step = 0.5;
if (timeout == null)
timeout = 10;
var stop = timeout/step;
for (var i = 0; i < stop; i++)
if (element.isVisible())
return;
target.delay(step);
element.logElement();
throw("Not visible");
【问题讨论】:
您最终解决了这个问题吗?我正在寻找实现类似的东西。 【参考方案1】:您正在向此函数传递一个“元素”对象。当函数启动时,您的“元素”对象具有 isVisible 属性 false 或者当屏幕上没有此类对象时,您正在传递 [object UIAElement Nil]。任何时候尝试获取此类对象的属性 isVisible 总是会返回 false。
如果你想让这个函数工作,你需要将“元素”作为一个对象传递给你的函数。 所以不是
if (element.isVisible())
您需要先获取元素对象并尝试获取 isVisible() 属性。
if (target.manWindow().elements()[0].isVisible())
在此更改后,将无需传递“元素”对象,因为此功能仅适用于一个元素。
要使此函数适用于任何元素,您需要传递的不是“元素”对象,而是返回要检查的“元素”对象的函数。 这是一个例子:
var target = ...;
var mainWindow = ...;
//function that returns firstObject
var firstElement = function()
return mainWindow.elements()[0];
//function that returns secondObject
var secondElement = function()
return mainWindow.elements()[1];
//这是您需要在“等待”功能中更改的内容。改变
if (element.isVisible())
与
if (element().isVisible())
函数调用示例:
waitForElement(firstElement, 10, 1);
waitForElement(secondElement, 10, 1);
注意:如果您使用 firstElement() 调用您的 waitForElement 函数 - 函数将失败并出现同样的错误。这会使您的测试更加复杂,但它确实有效。
【讨论】:
以上是关于iOS UI 自动化 UIA Element.is Visible() 抛出过时的响应?的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse运行自动化脚本报错: invalid element state: Element is not currently interactable and may not be manipu
Firefox上运行自动化测试脚本提示元素无法点击“WebDriverException: Message: Element is not clickable at point“解决方法
如何使用 C# 为 UIAutomation 目的调整 UIA 窗口的大小?
ContentControl 在应用程序通过 UI 自动化测试启动时不可见,但在用户启动应用程序时可见
关于selenium python Message: unknown error: Element is not clickable at point错误