如何在 wallaby 中获取 html 页面

How to get html page in wallaby

我尝试 运行 fin 函数,但由于某种原因我返回 nil。 我搜索的项目必须在那里,我怎样才能得到 html 看看哪里出了问题?

我不知道这是否是你的问题,但是当我尝试 wallaby 时 html:

<p class="results"><div class="green">That's all folks!</div></p>

用这个 find():

find(css(".results", count: 1))

我收到错误:

** (Wallaby.QueryError) Expected to find 1, visible element that matched the css '.results' but 0, visible elements were found.

但是,如果我将 html 更改为:

<div class="results"><span class="green">That's all folks!</span></div>

并且我使用相同的 find()(顺便说一句,它不是 return 列表,所以不要在 List.first() 之后使用),然后 wallaby 确实找到了元素.根据 html5 规范,您不能将 div 标签放在 p 标签内,开始的 div 标签将导致浏览器 close the p tag,如下所示:

                   HERE
                    |
                    V
<p class="results"></p><div class="green">That's all folks!</div></p>

我认为 wallaby 无法解析非法 html 并找到 p 标签。您可以先通过 html validator 尝试 运行 您的 html,然后再尝试 wallaby。

我有两个接收 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 之间使用 queries/assertions:

session
|> visit("/example/page")
|> print_page_text()
|> assert_text("Hello World!")

另一个有用的函数是Wallaby.Browser.take_screenshot/2