量角器的ExpectedConditions如何正常工作与非角度站点上的行为有关?

问题描述

为了单击按钮,我必须等待元素滑入可见视口。这可靠地起作用:

await browser.sleep( 1200 );
await btnToggleDeactivateQuestionnaire.click();

但是,由于我已经知道使用“ browser.sleep()”被认为是不好的做法,所以我想使用量角器的 ExpectedConditions

let isPresent = EC.presenceOf(btnToggleDeactivateQuestionnaire);
let isVisible = EC.visibilityOf(btnToggleDeactivateQuestionnaire);
let isClickable = EC.elementToBeClickable(btnToggleDeactivateQuestionnaire);
let isPresentAndVisibleAndClickable = EC.and(isPresent,isVisible,isClickable);

await browser.wait(isPresentAndVisibleAndClickable,4000);
await btnToggleDeactivateQuestionnaire.click();

等待4秒钟后,出现以下错误

Failed: Wait timed out after 4019ms
TimeoutError: Wait timed out after 4019ms
    at C:\xxx\lib\promise.js:2201:17
    at runMicrotasks (<anonymous>)
    at processticksAndRejections (internal/process/task_queues.js:97:5)

经过反复试验,我发现仅使用 “ EC.presenceOf”可以解决问题。但是,一旦我将其与“ EC.visibilityOf”或“ EC.elementToBeClickable”链接在一起,或者单独使用它,测试就会停止4秒钟,并在此时失败。

在我看来,这种行为似乎毫无意义。尤其是由于该元素自页面加载以来就存在,因此它尚不可见并单击(因为它必须先滑入视图)。

我对ExpectedConditions或它们在非角度站点上的行为的一般理解是错误的吗?我在这里想念什么?

解决方法

我的猜测是,这在量角器的功能范围内无法正常工作?: EC.and(isPresent,isVisible,isClickable);

我会尝试这样的事情:

let isPresent = await EC.presenceOf(btnToggleDeactivateQuestionnaire);
let isClickable = await EC.elementToBeClickable(btnToggleDeactivateQuestionnaire);
await btnToggleDeactivateQuestionnaire.click();

由于我认为您不需要visibilityOf后接elementToBeClickable,因此等待其可点击性应该可以正常工作。
我了解到,Web应用程序并非总是完美地制作而成,因此,当您使测试自动化时,找到正确的元素等待进行,是最具挑战性的部分。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...