【问题标题】:Why .sendKeys(Keys.chord(Keys.CONTROL, "a")) does not work in Chrome为什么 .sendKeys(Keys.chord(Keys.CONTROL, "a")) 在 Chrome 中不起作用
【发布时间】:2018-03-15 11:13:09
【问题描述】:

我正在尝试在文本字段中选择文本并将其删除。 我使用 chromedriver for linux。

这是我的代码:

loginPage.getPasswordField().sendKeys(Keys.chord(Keys.CONTROL, "a"));
loginPage.getPasswordField().sendKeys(Keys.DELETE);

但它不起作用(实际上是第一行)。为什么?如何让它发挥作用?

版本: 铬:版本 28.0.1500.95 ChromeDriver:chromedriver_linux64_2.1/chromedriver_linux64_2.2

【问题讨论】:

  • 不确定。你有错误吗?为什么不直接做 loginPage.getPasswordField().clear() 呢?
  • 我没有遇到错误。我只是看到该字段中的文本没有被选中,也没有被删除。我不能使用clear ...因为我的webapp以某种方式工作,它没有从webdriver捕获'clear'事件...我需要检查当字段中没有文本时是否禁用了登录按钮。我可以通过 loginPage.getPasswordField().sendKeys(Keys.BACK_SPACE); - 这行得通,但我也想检查“ctrl + a and delete”的情况......而后者 - 不起作用......
  • 那么这就是问题所在。 .clear 应该清除文本框中的所有内容。无话可问。所以不要试图修补它。您使用的是什么版本的 Selenium?您使用的是什么版本的 Chrome 和 ChromeDriver?那么当您致电.clear 时,究竟会发生什么?
  • 哦...非常抱歉我的错误解释....clear 有效,-我的网页无法正常工作:.clear 实际清除文本字段后,我的登录按钮仍未禁用正如预期的那样......所以我尝试修补我的webapp,而不是驱动程序:) 从一方面 - webapp 没有捕捉到.clear'干得好'......从另一方面......看起来像.clear不做实际用户做的事情来清除文本......所以......很难惩罚我的网络应用......
  • @yashaka 你得到这个问题的解决方案了吗?我也在研究这个问题。

标签: selenium webdriver selenium-chromedriver


【解决方案1】:

您是否尝试过使用操作生成器? 例如,来自我们的自动化套件:

public void selectAndDeleteTextViaKeyboard() {
    selectTextViaKeyboard()
    deleteViaKeyboard() 
}

public void deleteViaKeyboard() {
    Actions builder = new Actions(webDriverProxy.getWebDriver());
    builder.sendKeys(Keys.DELETE)
            .release().perform();
}

public void selectTextViaKeyboard() {
    Actions builder = new Actions(webDriverProxy.getWebDriver());
    Action select= builder
            .keyDown(Keys.CONTROL)
            .sendKeys("a")
            .keyUp(Keys.CONTROL)
            .build();
    select.perform();

}

【讨论】:

    【解决方案2】:
    public void copyToClipbord(String copyTo)
    {
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        StringSelection str = new StringSelection(copyTo);
        clipboard.setContents(str, null );
    }
    
    public void setText(WebElement element, String value)
    {
        copyToClipbord(value);
        element.click();
        element.sendKeys(Keys.chord(Keys.CONTROL, "v"), "");
    }
    

    【讨论】:

      【解决方案3】:

      它应该可以工作:

       webElement = driver.findElement(By.id("txtPassword"));
       webElement.sendKeys(Keys.chord(Keys.CONTROL, "a"), Keys.DELETE);
      

      【讨论】:

        【解决方案4】:
        loginPage.getPasswordField().clear
        

        【讨论】:

        • 在回答问题时,最好解释得更详细,以便网站的其他用户更容易理解。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-07
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多