如何在.sendkeys("密码")之后制作.click()?

时间:2018-05-01 22:12:44

标签: java selenium

我有这个代码,我填写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总是在加载。

2 个答案:

答案 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/这些等待策略必须帮助您克服这些问题。