代码之家  ›  专栏  ›  技术社区  ›  gabriel119435

如何制作。仅在之后单击()。sendkeys(“密码”)?

  •  0
  • gabriel119435  · 技术社区  · 6 年前

    我有这样的代码,我填写两个字段,然后点击登录按钮:

    driver.findElement(By.xpath(numberInputXPath)).sendKeys(number);
    driver.findElement(By.xpath(passwordInputXPath)).sendKeys(password);
    driver.findElement(By.xpath(loginButtonXPath)).click();
    

    我的问题是,有时按下登录按钮时,字段未完全填写。对我来说,不完整的模式似乎是随机的。字符串处有11个数字 number 还有我的 password 长度为8个字母数字字符。有时字段完全填满,有时第一个字段不完整一半 暗语 完全填满,反之亦然。有时它们会正常完成,我的登录也会成功完成。除了线程睡眠和 this 解决方案,我如何只等待字段被填充?

    编辑

    我没有时间尝试答案的解决方案,我会尽快,但我正在尝试自动登录 page .我一直等到Selenium正确识别 Login 按钮,单击它,然后按上面所述填写字段。我每次都注意到 sendKeys 执行时,页面仍在Chrome选项卡上显示加载图标。总是因此,我假设在编写本文时,总会加载一些JS。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Canberk Akduygu    6 年前

    我不知道你正在测试的网站的技术栈,但是。可能存在Ajax或角度问题。我遇到了同样的问题,当选择一个对象时,会有许多ajax CAL。因此,我们必须在每个Selenium命令之前实现一个服务员策略。

    你可以看看这篇文章: https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/ 这些等待策略必须帮助您克服这些问题。

        2
  •  1
  •   Bill Hileman    6 年前

    我目前无法访问所有代码。如果您认为这可能是一个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");
            }
        });
    }