t.me/atinfo_chat Telegram группа по автоматизации тестирования

XPATH возвращает список пустых элементов

Теги: #<Tag:0x00007f748ade0ef8> #<Tag:0x00007f748ade0e30> #<Tag:0x00007f748ade0d18> #<Tag:0x00007f748ade0c50> #<Tag:0x00007f748ade0b60>

Использую Selenium, C# и XPATH, нужно вытащить с сайта https://www.caesarscasino.com/en/all-games список игр.
Вот код html:

<div class="details">
    <div class="title">
          <p> Buffalo </p>
    </div>
</div>

Вытягиваю список вебэлементов:

var gamesNames = driver.FindElements(By.XPath("//div[@class='title']//p"));

В список попадает 30 обьектов, но без названий, поля Text пустые.
Данный XPATH работает в Firebug, находит элементы, но в программе показывает только пустые элементы.

на пайтоне я б сделал так

gamesNames = driver.find_element_by_xpath("//div[@class='title']//p").text

или можна на python сделать

gamesNames = driver.find_element_by_xpath("//div[@class='title']//p").get_attribute("value")

когда вы получаете эти элементы, имена еще не подгружаются в DOM. Дождитесь пока элементы станут видимыми

1 Симпатия

Помогло!

var gamesNames = driver.FindElements(By.XPath("//div[@class=‘title’]//p"));
Thread.Sleep(3000);

Спасибо

Один раз заработало, вернуло все title, потом опять перестало подтягивать. Я ничего не менял при этом, просто запустил еще раз. Пробовал даже ставить Thread.Sleep(9000);

А почему пауза после нахождения элементов? Какой в этом смысл

перед поиском когда ставлю, та же ситуация, не находит

читайте документацию expected conditions. thread.sleep - это жуткий антипаттерн, про который уже миллион раз написано.

Поля с названием были hidden. Решил вопрос добавлением JS скрипта:

driver.ExecuteScript(“return arguments[0].innerHTML”, game.FindElement(By.CssSelector(“div.title p”)));

Почему они то hidden, то нет?