我正在尝试在循环中使用isVisible()为我的iOS UIAutomation创建一个waitForElement类型的函数。当我尝试使用以下代码时,在弹出新屏幕时,它在等待元素时失败。元素显然在那里,因为如果我在点击元素之前执行了delay(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");
}
最佳答案
您正在将“element”对象传递给此函数。当函数启动时,您的“element”对象的isVisible属性为false,或者当屏幕上没有此类对象时,您将传递[Object UIAElement Nil]。试图在任何时候为这种对象获取属性isVisible总是会返回false。
如果您希望此功能正常工作,则需要将“element”作为对象传递给您的功能。
所以代替
if (element.isVisible())
您需要先获取元素对象,然后尝试获取isVisible()属性。
if (target.manWindow().elements()[0].isVisible())
进行此更改后,无需传递“元素”对象,因为此功能仅适用于一个元素。
要使此函数与任何元素一起使用,您不需要传递“element”对象,而是传递要检查的“element”对象的函数。
这是一个例子:
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函数-函数将因相同的错误而失败。这会使您的测试更加复杂,但可以正常工作。
关于javascript - iOS UIAutomation UIAElement.isVisible()引发过时的响应?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7044554/