Selenium为什么在连字符前面插入反斜杠?

时间:2019-04-03 19:03:54

标签: regex selenium selenium-webdriver css-selectors webdriver

以下代码在 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),但不能解决问题。它总是在其前面插入“ \”。

2 个答案:

答案 0 :(得分:0)

根据{em>类名的Selenium将不同的Locator Strategies转换为有效的 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