以下代码在 IE 和 Firefox 中失败。 Chrome从未有问题。
foundElement = driver.FindElement(By.Id("btn-GDR"));
它说找不到元素#btn\-GDR
为什么硒在 \
之前插入 -
?
Firefox 65.0.2版本 IE 11.0.9600.19301
编辑:更多信息:我已经尝试使用
“ btn \ x2dGDR”的含义是\ x2d是“-”符号(十六进制中的ASCII),但不能解决问题。它总是在其前面插入“ \”。
答案 0 :(得分:0)
根据{em>类名的值,Selenium将不同的Locator Strategies转换为有效的css-selectors , id ,名称,标签名称等通过以下方式转换:
cssEscape(value);
switch - cases定义为:
private String cssEscape(String using) {
using = using.replaceAll("([\\s'\"\\\\#.:;,!?+<>=~*^$|%&@`{}\\-\\/\\[\\]\\(\\)])", "\\\\$1");
if (using.length() > 0 && Character.isDigit(using.charAt(0))) {
using = "\\" + Integer.toString(30 + Integer.parseInt(using.substring(0,1))) + " " + using.substring(1);
}
return using;
}
因此,您看到 -
字符被 \
字符转义。
答案 1 :(得分:0)
找到解决方案后,我将回答自己的问题。 我在找到元素之前添加了一个等待。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.
PresenceOfAllElementsLocatedBy(By.Id("btn-GDR")));
结果是有时由于某种奇怪的原因而没有显示该元素。.我可以在屏幕上看到它,但是Selenium需要2-3秒才能正确地与它交互。是的,该元素始终可见,启用并且确实退出。另外,在报告选项时,Selenium report在输出消息中将连字符前面的反斜杠添加。
仅供参考,我在这里也发现了同样的情况。没有答案。 Similar Problem