【问题标题】:Is sendKeys ever going to work properly with Java Selenium? [closed]sendKeys 能否与 Java Selenium 一起正常工作? [关闭]
【发布时间】:2018-12-27 14:15:25
【问题描述】:

我将如何编写任何每次都能产生相同结果并且永远值得信任的 selenium 自动化代码? 你们大多数人都应该知道 sendKeys 简直就是垃圾。

-它没有写完整的输入

-有时它根本不写

-它会跳到其他元素并弄乱输入

-它不能写更长的字符序列

-你不能正确检查它

-你不能让它等待。直到所有东西都发送出去

而这一切都被简单地随机化为一个十亿分之一的集群 我此刻的例子(我可能改变了我的方法超过 10 次)

public static void sendKeys(By by, String input) {
    if (by == null) {
        throw new IllegalArgumentException("Parameter 'by' is null.");
    }
    if (input == null) {
        throw new IllegalArgumentException("Parameter 'input' is null.");
    }
    LOGGER.info("sendKeys() - By locator '{}'", by.toString());
    WebElement elem = WebElementFinder.getElement(by);
    elem.clear();
    elem.sendKeys(input);
    checkKeySendResult(by, input);
    }

public static void checkKeySendResult(By by, String input) {
    WebElement elem = WebElementFinder.getElement(by);
    String value = elem.getAttribute("value");
    if (!value.equals(input)) {
        LOGGER.info("sendKeys() - didn't work");
        elem.clear();
        elem.sendKeys(input);
        checkKeySendResult(by, input);
    } else {
        LOGGER.info("sendKeys() - sent all characters");
    }
}

你知道我的期望;

-所有密钥都应该发送

-sendKeys 不应在打字中途停止然后转到其他地方

-我应该能够正确检查输入是否正确

-如果不正确,我应该能够轻松而坚定地纠正它

请不要告诉我使用服务员,因为我显然确实在每一步都尝试过服务员......

我会测试这里提供的任何类型的建议,我希望每个人都这样做,并希望有人可以让我睁开眼睛看到稳定的 sendKeys 方法。

如果你不能帮助我,请使用这个帖子来激烈地描述你对 sendKeys 的仇恨以及使用它是多么令人沮丧。

感谢大家的意见。

obs:对不起我的法语

【问题讨论】:

  • 在没有提供导致问题的 HTML 的特定问题的情况下很难在这里为您提供帮助(更好的是,将我们指向有问题的页面)。你上面提到了很多问题,其实太多了。我倾向于认为问题在于网站行为,而不是您的自动化代码。例如,如果 sendKeys() 向限制字符数的字段发送太多字符,您将看不到发送给它的所有字符。这是该字段的预期行为,而不是 sendKeys() 的错误

标签: java selenium sendkeys


【解决方案1】:

我认为问题不在于 sendKeys 本身。对我们自己的 repo 的快速检查显示了大约 600 次 sendKeys 的使用。 该命令确实存在一些问题,但这更多是由于网站的实施而不是 sendKeys。

作为一种解决方法,我们实现了一个与您的方法类似的方法,但我们使用 while 而不是使用 if 语句

public void sendKeys(WebElement element, String keys){
   while(!element.getAttribute("value").equal(keys){
        element.clear();
        element.sendKeys();
   }
}

所以当文本不匹配时,清除并重试。您还可以输入一个记录器和/或最大尝试次数来限制它的尝试次数。

【讨论】:

    【解决方案2】:

    我在使用 selenium 时遇到了很多问题,而不仅仅是 sendkeys 其他选项(例如单击按钮)。不得不多次改变我的方法。 为了避免这些问题,您可以尝试使用 Selenium 中的 Java Script Executer,就像我所做的那样,对您的 DOM 做任何您想做的事情。 您可以为字段设置值,单击按钮,它为您提供了使用 Java Script 可以实现的大部分功能。感觉就像,您已经自动化 Selenium 以在您想要的页面上执行 Java 脚本。

    去吧,这样,值得一试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2012-12-29
      • 2018-11-10
      • 2014-07-01
      • 1970-01-01
      相关资源
      最近更新 更多