我将如何编写每次都能产生相同结果并且永远可以信赖的硒自动化代码? 因为大多数人应该知道sendKeys就是狗屎。
-它没有写完整的输入
-有时根本不写
-它会跳到其他元素并弄乱输入
-它不能写更长的字符序列
-您无法正确检查
-您不能等待它,直到所有内容发送完毕
所有这些都被简单地随机分为十亿个 这是我目前的例子(我可能改变了十次以上)
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:对不起,我的法语
答案 0 :(得分:1)
我认为问题不在于sendKeys本身。快速查看我们自己的存储库可发现sendKeys约有600种用法。 该命令的确存在一些问题,但这更多是由于网站的实施而不是sendKeys所致。
作为一种解决方法,我们实现了一种与您相似的方法,但是我们使用while而不是使用if语句
[^A-Z]
因此,如果文本不匹配,请清除并重试。您还可以放入记录器和/或最大尝试次数以限制尝试次数。
答案 1 :(得分:0)
我遇到了很多硒问题,不仅是sendkeys还有其他选择,例如单击按钮。不得不改变我的方法也很多次。 为了避免这些问题,您可以尝试使用Selenium中的Java Script Executer(我所做的)来完成您想对DOM做的任何事情。 您可以为一个字段设置值,单击一个按钮,它为您提供了使用Java Script可以实现的大多数功能。感觉就像您已经自动化了Selenium来在所需页面上执行Java脚本一样。
继续前进,值得一试。