При переходе с Selenium 1 на Selenium 2 у меня возникает проблема.
У меня есть структурный эквивалент следующего:
<ul id="documentType">
<li><a href="http://somelink.com">first</a></li>
<li><a href="http://someotherlink.com">second</a></li>
<li><a href="http://someotherlink.com">third</a></li>
</ul>
Ранее я бы в Selenium 1 использовалследующий селектор CSS, чтобы найти первую ссылку привязки:
#documentType li:first-child a
Это будет прекрасно работать, однако, когда я переключаюсь на селен 2 и пытаюсь использовать эквивалентный элемент, я получаю не найден.Следующее работает, но менее точно, чем хотелось бы.
#documentType li a
Я пытался, но не смог заставить работать следующее:
#documentType li:first a
Для большей детализации я используюHtmlUnitDriver со следующим кодом:
driver.findElementByCssSelector("#documentType li a");
Любая помощь в получении эквивалента оригинального селектора работает, я был бы очень признателен!
Я в замешательстве:)
РЕДАКТИРОВАТЬФил Сакре (Phill Sacre) поднял хорошую мысль о том, что я напрямую использую HtmlUnitDriver, который может быть источником проблемы, поскольку это чистая реализация Java.Я делаю это специально для способности справиться с неприятной проблемой Ajax - узнать, когда Ajax запущен.Вы можете сделать это с помощью следующего кода:
protected void waitForAjaxToComplete() {
long result = jQueryActive();
while (result != 0) {
result = (Long) driver.executeScript("return jQuery.active;");
}
}
Это очевидно выгоднее, чем использование метода ожидания появления элемента, который может быть очень неточным.Я хотел бы, чтобы WebDriver предоставил метод executeScript, который бы разрешил эту проблему.
Далее я отметил, что по умолчанию HtmlUnitDriver использует реализацию на основе Java для анализа предоставленного селектора css, и я предполагаю, что это источникпроблема.Синтаксический анализатор - com.steadystate.css.parser.SACParserCSS21.SACParserCSS21, который не может должным образом учитывать квалификаторы: first и: first-child.
Что, кажется, делает это нормально, так это то, что поведение HtmlUnitDriver кажетсявернуть первый элемент по умолчанию.Это родственный метод findElementsByCssSelector, похоже, возвращает упорядоченный список.
В результате, хотя это и кажется ошибкой, я, возможно, ответил на свой вопрос, узнав, как работает HtmlUnitDriver.