Watir не находит все элементы с именем класса - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь найти все элементы span, которые имеют класс, на веб-сайте «feed» с помощью Watir.

Сайт загружает больше постов по мере приближения ко дну. В настоящее время я использую следующий код:

# Go to the bottom of the page
browser.driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
likes = @browser.elements(:xpath, "//*[contains(@class, 'className')]")
# I also tried with the following
likes = @browser.spans(:class => "className")

Элемент, который я ищу, имеет следующий стиль:

<span class="random_value className ">Like</span>

Но когда я делаю likes.length, я получаю меньше элементов (3) или ни одного, когда есть хотя бы 25 промежутков с классом className.

Что-то не так с моим кодом?

1 Ответ

0 голосов
/ 08 мая 2018
likes = @browser.spans(:class => "className")

Это явно не сработает, потому что вы говорите так, как будто имя класса содержит "имя_класса", так что вам лучше писать с регулярным выражением

likes = @browser.spans(:class => /className/)

или использовать другой вариант с небольшим исправлениемтак как вам нужен только span, вам не нужно использовать * вместо использования span

likes = @browser.elements(:xpath, "//span[contains(@class, 'className')]")

Watir обычно ждет полной загрузки страницы, когда вы переходите с одной страницы на другую, нам не нужноиспользуйте любой статический оператор сна, но поскольку вы говорите, что страница загружается больше размаха, когда дело доходит до дна, ваш случай кажется немного другим, я сильно подозреваю, что приведенный выше код выполняется быстро даже до полной загрузки страницы, поэтому введите sleep 5, чтобы проверить, увеличилось ли увеличениев количестве промежутков, поэтому напишите следующий код с sleep 5

В WATIR для вас есть execute_script, поэтому вам не нужно использовать селен execute_script напрямую

@browser.execute_script("window.scrollBy(0,document.body.scrollHeight)")
sleep 5
likes = @browser.elements(:xpath, "//span[contains(@class, 'className')]")
...