如果量角器无法在视图中定位元素,如何在量角器测试中执行自动滚动到元素?

How to perform auto Scroll to element in Protractor test if Protractor fails to locate the element int the view?

我有一套测试,如果量角器无法在当前视图中定位元素,我想自动滚动到页面上的元素。

在对 UI 进行一些更改以修复 headers 之前编写测试。这导致很少的 e2e 测试失败。

目前,我必须转到每个失败的 'it blocks' 并使用辅助函数对元素执行滚动。

我想指示量角器在找不到元素时重新寻找元素

这可能吗?

您可以创建一个 wait(ExpectedCondition) 示例,以等待元素超时,然后再单击它或执行任何其他操作。

await waitUntilPresenceOfElement(element(by.id('some id')));

export async function waitUntilPresenceOfElement(element: ElementFinder, timeout: number = 5000): Promise<any> {
    return await browser.wait(ExpectedConditions.presenceOf(element),
        timeout,
        'Waiting for element ' + element.locator() + 'to be PRSENCE with timeout ' + timeout + 'ms'
    ); }

如果找不到超时定义的元素,则有问题。

第二种解决方案是使用异常句柄并创建一些重试函数。

export async function clearText(textBox: ElementFinder) {

    try {
        await textBox.clear().then(() => {
            console.log('Text field has been cleared.');
        });
    } catch (error) {
        // example for no such element exception
        if (error instanceof NoSuchElementError) {
            // retry function
        } else {
            console.log('Error wile trying to clear text from element.');
            throw error;
        }
    }
}

在需要 'scroll' 一个元素并单击不在视图中时遇到同样的问题。

这会使用该元素,然后将视图移动到它,以便您可以单击它:

等待browser.actions().mouseMove('element').perform()