【问题标题】:Selenium SendKeys not working for open brackets and harsh keys when using java使用 java 时,Selenium SendKeys 不适用于左括号和苛刻的键
【发布时间】:2013-10-31 10:55:03
【问题描述】:

我使用的是 selenium webdriver 2.33.0,并且我需要在数据("(", "#") 中发送带有以下字符的数据

当我们尝试使用 sendkeys 发送这些字符时

"WebElement dat = driver.findElement(By.xpath("xpathexpression);
dat.sendkeys("select * from (?s, ?p, ?o)");

以下数据在文本区域中显示为select * from ?s, ?p, ?o) 缺少左括号。我也使用了 selenium 动作类 sendkeys 和机器人 sendkeys。

我无法解决此问题。有人可以帮我吗?

【问题讨论】:

  • 您能否告诉我们以下字符串是否给出了相同的错误? "select * from"+" (?s, ?p, ?o)"
  • 一个好的调试技巧是使用 Javascript 将相同的内容放入文本框中。如果 Javascript 发生同样的事情,Selenium 没有错。

标签: selenium selenium-webdriver


【解决方案1】:

丑陋但有效的解决方法:按照 user2935099 的建议,将左括号 ( 替换为键序列 shift + 9

dat.sendKeys(Keys.chord(Keys.SHIFT, "9"));

有趣的是,无论您当前的键盘布局如何,这似乎都有效(我使用的是爱尔兰语言环境和法语布局)。


我在 2.40.0 版本中偶然发现了这个,这绝对是 Selenium 中的一个错误。在 Firefox JavaScript 控制台中使用以下内容可以完美运行:

 var box = getElementById('SearchBox');
 box.setValue('AB (CDE FGH)');

【讨论】:

    【解决方案2】:

    使用动作类时问题已解决

    WebElement dat = driver.findElement(By.xpath("xpathexpression"); 
    dat.click(); 
    Actions data = new Actions(driver);
    data.sendKeys(Keys.chord(Keys.CONTROL,"a"),Keys.DELETE);
    data.perform();
    query = query.replaceAll("\\(", Keys.chord(Keys.SHIFT,"9")); 
    query = query.replaceAll("\\#", Keys.chord(Keys.SHIFT,"3")); 
    query = query.replaceAll("\\-", Keys.SUBTRACT.toString()); 
    query = query.replaceAll("\\}", Keys.chord(Keys.SHIFT,"]")); 
    data.sendKeys(query); 
    data.perform();
    

    【讨论】:

    • 请编辑您的答案并格式化代码以使其可读
    【解决方案3】:

    我尝试在我的 selenium 设置中输入相同的内容,它在 firefoxchrome 中都运行良好。我不太确定原因,但我注意到您使用的是非常旧的硒版本(2.33.0),目前2.37.0 可用。可能您应该尝试更新 selenium 并且 t 应该可以按预期工作。

    【讨论】:

    • 感谢 DigVijay。升级到 selenium java 2.37.0 后我面临同样的问题。
    【解决方案4】:

    同样的问题,使用2.40.0 我的workaorund 正在使用剪贴板,不是很漂亮,但测试系统对剪贴板没有太多用处...

    public static void setTextByClipboard(WebElement element, String text) {
        StringSelection selection = new StringSelection(text);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, selection);
        element.sendKeys(Keys.chord(Keys.CONTROL, "v"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多