将wait与selenium web驱动程序异步内容一起使用



我正在尝试使用javascript的selenium web驱动程序在我的网站上自动进行测试。

当页面加载时,我如何使用wait方法运行测试,其中的内容可能还没有准备好,例如数据来自外部api等?

在我的例子中,我的内容是由一个外部js文件加载的。你可以看到这个fiddle中的页面是什么样子的。我无法在下面的代码中链接它,因为fiddle被包装在iframe中。

<head>
<script src="https://cdn.auth0.com/js/lock/10.2/lock.min.js"></script>
</head>
<body onload="lock.show();">
<div id="content">
<script type="text/javascript">
var domain = 'contoso.auth0.com';
var clientID = 'DyG9nCwIEofSy66QM3oo5xU6NFs3TmvT';
var lock = new Auth0Lock(clientID, domain);
lock.show({
focusInput: false,
popup: true,
}, function (err, profile, token) {
alert(err);
});
</script>
</div>
</body>

我可以用睡眠让它工作,但不能保证超时后我的内容会准备好。

const {Builder, By, Key, until} = require('selenium-webdriver');
let driver = new Builder()
.forBrowser('firefox')
.build();
driver.get('MY_URL')
driver.sleep(2000).then(function() {
driver.findElement(By.name('email')).sendKeys('test@test.com')
driver.findElement(By.name('password')).sendKeys('test')
//driver.findElement(By.className('auth0-lock-submit')).click()
})

但如果我尝试等待

function login() {
return driver.findElement(By.name('email')).sendKeys('test@test.com')
}
driver.get('MY_URL')
driver.wait(login, 5000)

我得到NoSuchElementError: Unable to locate element: *[name="email"]

我如何才能让它工作,以便在继续之前等待我的内容可用。

隐式等待将告诉web驱动程序在抛出"无此类元素异常"之前等待一定时间。默认设置为0。一旦我们设置了时间,web驱动程序将等待该时间,然后再抛出异常。。

driver.manage().timeouts().implicitlyWait(TimeOut, TimeUnit.SECONDS);   

尝试使用FluentWait。创建您想要等待的元素的by函数,并在下面的方法中传递它

WebElement waitsss(WebDriver driver, By elementIdentifier){
Wait<WebDriver> wait =
new FluentWait<WebDriver>(driver).withTimeout(60, TimeUnit.SECONDS) .pollingEvery(1, TimeUnit.SECONDS).ignoring(NoSuchElementException.class);
return wait.until(new Function<WebDriver, WebElement>()
{
public WebElement apply(WebDriver driver) {
return driver.findElement(elementIdentifier);
}});
}

显式等待代码:

WebDriverWait wait = new WebDriverWait(driver, 60);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//span[contains(.,'Next')]")));

参考:-

https://www.guru99.com/implicit-explicit-waits-selenium.html

最新更新