Как получить 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.

Другие вопросы по тегам