【问题标题】:How to make .click() only after .sendkeys("password")?如何仅在.sendkeys(“密码”)之后制作.click()?
【发布时间】:2018-05-02 21:37:46
【问题描述】:

我有这个代码,我填写了 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-alphanumeric-char 长。有时字段被完全填满,有时第一个字段不完整一半,password 完全填满,反之亦然。有时它们正常完成并且我的登录成功完成。除了线程休眠和this 解决方案,我怎么能等到我的字段被填满?

编辑

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

【问题讨论】:

  • 让我猜猜……您的浏览器使用的是 IE?
  • 不,我使用ChromeDriver 作为浏览器。我在想,当 Selenium 在其上插入数据时,某些 JS 可能会更改 XPath
  • @GabrielRado,请检查两个文本字段中的数字和密码是否会在您手动填写时进行验证检查,如果是这样,我猜开发人员添加的验证 Javascript 功能会破坏 selenium 正常的发送键。跨度>
  • @GabrielRado 您观察到的行为可能有很多可能性。使用相关的 HTML 更新问题

标签: java selenium


【解决方案1】:

我不知道您正在测试的网站的技术堆栈,但是。可能存在 Ajax 或 Angular 问题。 I had the same problem where there are many ajax cals when an object is selected.所以我们在每个 Selenium Command 之前实现了一个服务员策略。

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

【讨论】:

  • 这篇文章稍加修改就解决了我的问题,谢谢
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2012-01-13
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多