Как получить HTML-страницу в валлаби
Я пытаюсь запустить функцию fin, но по какой-то причине я получаю ноль. Элемент, который я ищу, должен быть там, как я могу получить HTML, чтобы увидеть, что пошло не так?
2 ответа
У меня есть две вспомогательные функции, которые получают сеанс wallaby.
Первый печатает видимый текст в STDOUT:
def print_page_text(session) do
session |> Wallaby.Browser.text() |> IO.inspect()
session
end
Вторая функция печатает полный исходный код HTML-страницы в STDOUT:
def print_page_source(session) do
session |> Wallaby.Browser.page_source() |> IO.inspect()
session
end
Возвращая сеанс, эти функции можно использовать между обычными запросами / утверждениями wallaby:
session
|> visit("/example/page")
|> print_page_text()
|> assert_text("Hello World!")
Еще одна полезная функция - Wallaby.Browser.take_screenshot/2
Я не знаю, если это ваша проблема или нет, но когда я попробовал Wallaby на этом HTML:
<p class="results"><div class="green">That's all folks!</div></p>
с этим find()
:
find(css(".results", count: 1))
Я получил ошибку:
** (Wallaby.QueryError) Ожидается, что найден 1 видимый элемент, который соответствует css '.results', но 0 видимых элементов найдено.
Но если я изменю HTML на это:
<div class="results"><span class="green">That's all folks!</span></div>
и я использую то же самое find()
(который, кстати, не возвращает список, так что не следуйте этому с List.first()
), тогда валлаби найдет элемент. Согласно html5
spec, вы не можете поместить тег div внутри тега ap, и открытие div
тег заставит браузер закрыть тег p, например так:
HERE
|
V
<p class="results"></p><div class="green">That's all folks!</div></p>
Я не думаю, что Wallaby может проанализировать нелегальный HTML и найти тег p. Вы можете попробовать запустить свой html через валидатор html, прежде чем пытаться использовать wallaby.