我有这个代码,我填写2个字段,然后点击登录按钮:
driver.findElement(By.xpath(numberInputXPath)).sendKeys(number);
driver.findElement(By.xpath(passwordInputXPath)).sendKeys(password);
driver.findElement(By.xpath(loginButtonXPath)).click();
我的问题是,有时按下登录按钮时字段未完全填充。不完整的模式对我来说似乎是随机的。我在字符串number
处有11个数字,而我的password
长度为8个字母数字字符。有时字段完全填满,有时第一个字段不完整,password
完全填充,反之亦然。有时他们正常完成并且我的登录成功完成。除了线程休眠和this解决方案之外,我怎么才能等到我的字段被填满?
修改
我没有时间尝试答案'解决方案,我会尽快,但我试图在此page尝试自动登录。我等到Selenium识别出正确的Login
按钮,单击它然后按上面的说明填写字段。我注意到,每次执行sendKeys
时,该页面仍会在Chrome标签上显示加载图标。总是。所以我假设在撰写本文时,一些JS总是在加载。
答案 0 :(得分:1)
我目前无权访问所有代码。如果您认为它可能是ajax问题,我确实有代码等待ajax完成。如果我的可用代码(如下)没有帮助,我会发布。它检查文档状态是否准备好,通常在页面加载完成时设置,但不考虑像ajax元素之类的东西。值得一试,所以请告诉我。
/**
* Wait for the web page to finish loading
* @author Bill Hileman
*/
public void waitForPageToLoad() {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver wdriver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
}
});
}
答案 1 :(得分:1)
我不知道您正在测试的网站的技术堆栈但是。可能存在Ajax或Angular问题。我有同样的问题,当选择一个对象时,有很多ajax cals。所以我们在每个Selenium Command之前都实现了一个服务员策略。
您可以查看文章:https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/这些等待策略必须帮助您克服这些问题。