【问题标题】:Not able to enter full text in editbox无法在编辑框中输入全文
【发布时间】:2017-10-24 14:59:30
【问题描述】:

我正在尝试在编辑框中输入文本,但有时它只输入了一半的文本(无法输入前几个字符)

即对于下面的代码enterFirstName("12345678901234567890123456789012345678901") 只输入30 左右字符而不是41

By firstNameEditbox = By.id("firstName");

public void enterFirstName(String firstName){
    WebDriverWait wait = new WebDriverWait(driver, timeout);
    element = wait.until(ExpectedConditions.presenceOfElementLocated(identifier));
    wait.until(ExpectedConditions.visibilityOf(element));
    element.sendKeys(firstName);
    findElementWithWait(firstNameEditbox).
}

网址:https://mpower.tvo.org/educators/#/signup/

WebDriver 版本: 3.5.2

浏览器: Chrome 58.0.3029.110(64 位)

Chrome 驱动程序版本: 2.26.436382

知道为什么会发生这种情况或如何解决这个问题吗?

【问题讨论】:

  • 很可能是分配给该字段的所有侦听器的副作用。为keydown 事件分配了3 次相同的侦听器。您可以尝试在每个字符上调用 sendKeys。另一种方法是使用脚本注入来模拟粘贴:var elm=arguments[0], txt=arguments[1]; elm.focus(); elm.value=txt; elm.dispatchEvent(new Event('change'));
  • 你是怎么知道听众的,如果你能解释一下,将来会对我有帮助。
  • 检查一个元素,所有的监听器都在右侧面板的“事件监听器”选项卡中。
  • @FlorentB。谢谢。该领域有很多事件侦听器,而且很多都是重复的。现在我已经申请了通过字符输入字符串的解决方案。这不是完美的解决方案,但现在可以使用

标签: selenium selenium-webdriver webdriver selenium-chromedriver


【解决方案1】:

输入长文本,我一般都是用js来提高性能,这个用处:​​

public boolean setValue(String text) {
    logger.info(String.format("<%s(%s) set value '%s'", el.getTagName(), el.getText(), text));
    try {
        JavascriptExecutor js = (JavascriptExecutor) webElementFinder.getDriver();
        js.executeScript("arguments[0].value = arguments[1];",
                waitForElementVisible(config.getBrowserElementFinderTimeout()), text);
        return true;
    } catch (TimeoutException e) {
        logger.warn(e.getMessage());
        logger.warn(
                String.format("<%s(%s) Element not visible within timeout period", el.getTagName(), el.getText()));
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2019-11-10
    • 1970-01-01
    相关资源
    最近更新 更多