selenium-webdriver(javascript绑定)中的自定义等待条件不起作用

问题描述 投票:0回答:2

我在定义自定义等待条件时遇到了selenium javascript绑定的问题。我正在编写一个测试用例来测试一个按钮的功能,其中一个按钮被禁用,但最终会被启用。状态之间的等待时间非常长(4分钟),因为页面加载时会播放教程动画,完成后会启用该按钮。

我已尝试在按钮上使用until.elementIsEnabled条件,但这不起作用。所以,我一直试图让自定义条件起作用。

根据API documentation on until conditions,自定义事件可以编码如下:

driver.wait(function() {
    return driver.getTitle().then(function(title) {
        return title === 'webdriver - Google Search';
    });
 }, 1000);

从那个例子,我有这个代码等待状态转为true:

const locator = { id: "Button" };
await driver.wait(until.elementLocated(locator));
const button = await driver.findElement(locator);

await driver.wait(async function () {
    const attr = await button.getAttribute("enabled");
    log.info(model.browser.type + " - " + "Polling attribute value: " + attr);
    return await attr === true;
}, 400000);

从我在那里的日志记录(这是js-logging npm包),我看到selenium-webdriver每毫秒循环该代码,并且状态确实在大约4分钟内从false转换为true,正如预期的那样。但是循环一直持续到它超过400000ms的超时值,大约在变量状态改变后两分钟。

我在这里错过了什么?

javascript selenium-webdriver
2个回答
0
投票

你尝试过使用fluentWait吗?

Wait wait = new FluentWait(driver)
    .withTimeout(30, SECONDS)
    .pollingEvery(5, SECONDS)
    .ignoring(NoSuchElementException.class);

WebElement foo = wait.until(new Function() {

    public WebElement apply(WebDriver driver) {
        return driver.findElement(By.id("foo"));
    }

});

0
投票

documentation for WebDriver#wait要求将WebDriver对象作为参数传递给函数。

await driver.wait(function(driver) {
    return driver.getTitle().then(function(title) {
        return title === 'webdriver - Google Search';
    });
}, 1000);

或者,您可以使用Promise或Condition

© www.soinside.com 2019 - 2024. All rights reserved.