Почему Selenium вставляет обратную косую черту перед символом дефиса? - PullRequest
0 голосов
/ 03 апреля 2019

Следующий код не работает в 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 в HEX), но это не решает проблему.Перед ним всегда вставляется «\».

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Я отвечу на свой вопрос, так как нашел решение. Я добавил ожидание, прежде чем найти элемент.

    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
    wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.
    PresenceOfAllElementsLocatedBy(By.Id("btn-GDR")));

Оказывается, что иногда элемент отсутствует по какой-то странной причине ... Я вижу его на экране, но Selenium требуется 2-3 секунды, чтобы должным образом взаимодействовать с ним. Да, элемент всегда виден, включен, и он действительно выходит. Кроме того, при сообщении параметров Selenium reports добавляет обратную черту перед дефисом в выходное сообщение.

К вашему сведению, я нашел такой же случай здесь. Это было без ответа. Аналогичная проблема

0 голосов
/ 09 апреля 2019

Как Селен преобразует различные Стратегии локатора в его эффективные в соответствии с переключателем - кейсы значения из имя класса , идентификатор , имя , имя тега и т. д. преобразуются посредством:

cssEscape(value);

cssEscape(value) определяется как:

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;
}

Следовательно, вы видите, что - символ экранирован символом \.

...