Как использовать несколько локаторов CSS в качестве локатора селена?
-
21-09-2019 - |
Вопрос
Я пытаюсь перейти по ссылке в строке таблицы, содержащей несколько ссылок.Этот шаблон используется во всей таблице.
Это работает:
browser.wait_for(:element => "css=tr:nth-child(1) li:nth-child(2) > a")
Это не делает:
browser.click "css=tr:nth-child(1) li:nth-child(2) > a"
Есть идеи, почему это может быть?Я использую селен-клиент RubyGem.
Решение
Я подозреваю, что это связано с ошибкой в cssQuery, который Selenium в настоящее время использует для поиска элементов с помощью CSS.Подробности о проблеме и патче можно найти в комментариях к следующей проблеме: http://jira.openqa.org/browse/SEL-698
Надеюсь, это поможет - я считаю, что Selenium 2 будет использовать другую библиотеку для локаторов CSS - возможно, JQuery's Sizzle (http://sizzlejs.com/), что должно решить эту проблему.
Дэйв.
Другие советы
Чтобы избежать подобных болезненных проблем с CSS, я установил jQuery в качестве пользовательского расширения.Это дает возможность определить строку локатора, аналогичную CSS («jquery=td.dt-col-status div.dt-liner:contains('Complete')»), что является гораздо более мощным инструментом.Если хотите, я могу подробнее рассказать, как я это сделал для Java RC.
Это ошибка в Selenium 1. Я бы попробовал записать весь путь в вашем пути CSS и посмотреть, поможет ли это.
например, если вы используете следующий HTML, вы можете использовать следующий локатор CSS
<table> <tr> <td> <li> <a href="/yourlink" >
</li> </td> </tr> </table>
"css=tr:nth-child(1) > td > li:nth-child(2) > a"
Если это не сработает, вы всегда можете использовать XPath.Он так же выразителен, как и локаторы CSS, но имеет меньше сбоев.Единственное, что вам нужно иметь в виду при использовании xpath, это то, что они обычно медленнее, чем локаторы CSS.
"xpath=//tr/td//li[2]/a"