我正在使用(new Actions(driver).sendKeys(String).perform()
向webdriver发送输入。但是,我一直得到不一致的结果。有时String完全发送,有时会丢失一个或另一个字母,即使字符串本身只有几个字符。
我甚至尝试一次发送一个字符串(使用for循环)并且我仍然得到相同的不一致行为 - 它比以前更少掉键,但仍然不是100%准确。
可能的原因是什么,以及如何解决这个问题?
我正在使用Chromedriver,Java / JUnit,键盘布局设置为美国。
答案 0 :(得分:0)
我仍然不清楚究竟是什么导致了这一点 - 我发现将所有密钥发送到某些extjs组件的失败是不一致的。我不确定这是不是做了一些奇怪的事情或者硒有点片状。我们在制作字符串或调用发送键时没有做任何奇怪的事情(除了额外的等待来检查元素是否已启用并显示)但是它在我们的代码中感觉不像它。
我的解决方案是重复发送密钥,直到它们明显粘住。我已经包装了selenium api,原因有很多,因此对WebElements的所有调用都通过一个名为WrappedElement的类进行路由,该类具有send keys方法:
public void SendKeys(string text)
{
Func<string> errorMessage = () => string.Format("couldn't send keys {0} entered either {1} or {2}", text, Text, Value);
Action actionToTry = () =>
{
_element.Clear();
RawSendKeys(text);
};
Wait.RepeatedlyTry(actionToTry, () => Text == text || Value == text, errorMessage);
}
public void RawSendKeys(string text)
{
_element.SendKeys(text);
}
wait方法的简化版本如下所示:
public void RepeatedlyTry(Action actionToTry, Func<bool> completed, Func<string> errorMessage)
{
Wait.Until(d =>
{
actionToTry();
return completed();
});
}
Where Where直接调用直到已配置的DefaultWait