2014-12-12 3 views
2

Я пытаюсь получить первые два div из данного класса с веб-сайта с помощью селекторов css в селене. Я буду использовать SO, чтобы продемонстрировать проблему. Если я пытаюсь селектор в Дев инструментов консоли хромированными это работает:: eq псевдоселектор не работает с Selenium WebDriver/Chrome

$('div.question-summary:eq(0)') 
[<div class=​"question-summary narrow tagged-interesting" id=​"question-summary-27442616">​…​</div>​] 
$('div.question-summary:eq(1)') 
[<div class=​"question-summary narrow tagged-interesting" id=​"question-summary-27442177">​…​</div>​] 

Но если я сделать следующее с selenlium WebDriver я получаю сообщение об ошибке:

require 'selenium-webdriver' 
driver = Selenium::WebDriver.for :chrome 
driver.navigate.to('http://www.stackoverflow.com') 
first_element = driver.find_element(:css, 'div.mainnav:eq(0)') 

Селен :: WebDriver :: Ошибка: : InvalidSelectorError: неверный селектор: указан недопустимый или незаконный селектор

Есть ли другой способ выразить этот селектор? Или способ заставить селен реагировать на него?

ответ

3

Selenium использует собственный механизм выбора CSS браузера. В результате метод find_element рассмотрит селектора jQuery, в этом случае :eq(0), как недопустимый.

Если вы хотите использовать селектор jQuery, вам необходимо выполнить этот скрипт вручную, используя метод execute_script. Обратите внимание, что при использовании этого подхода будет возвращен массив Selenium :: WebDriver :: Element, поэтому используется .first (чтобы получить первый элемент массива).

first_element = driver.execute_script('return $("div.question-summary:eq(0)");').first 

Тем не менее, если только селектор JQuery вы пытаетесь использовать :eq, вы могли бы получить от стандартных CSS селекторов. Селектор :eq возвращает определенный элемент в наборе соответствия. Вы можете сделать то же самое, используя методы find_elements и []:

first_element = driver.find_elements(:css, 'div.question-summary')[0] 
second_element = driver.find_elements(:css, 'div.question-summary')[1] 
Смежные вопросы