Пытаясь прочитать веб-страницу в Hound, я получаю ошибку компиляции для Hound.start_session
Я начал новый проект и настроил его так:
mix new example
cd example
Я очистил "lib/example.ex "и поместил туда следующий код:
Application.start :hound
defmodule Example do
use Hound.Helpers
def run do
Hound.start_session
navigate_to "http://akash.im"
IO.inspect page_title()
# Automatically invoked if the session owner process crashes
Hound.end_session
end
end
Example.run
Это образец кода, представленный на https://github.com/HashNuke/hound/blob/master/notes/simple-browser-automation.md.
Затем я установил сервер Selenium через brew install selenium-server-standalone
(Я на MacOS), запустил через brew services start selenium-server-standalone
и добавил config :hound, driver: "selenium"
к config/config.exs
я добавил Application.ensure_all_started(:hound)
как первая строка test/test_helper.exs
.
Наконец, я добавил {:hound, "~> 1.0"}
смешать. exs и запустить mix test
. Тогда я получаю следующую ошибку компиляции:
localhost:example alex$ mix test
===> Compiling parse_trans
===> Compiling mimerl
===> Compiling metrics
===> Compiling unicode_util_compat
===> Compiling idna
==> jason
Compiling 8 files (.ex)
Generated jason app
==> ssl_verify_fun
Compiling 7 files (.erl)
Generated ssl_verify_fun app
===> Compiling certifi
===> Compiling hackney
==> hound
Compiling 37 files (.ex)
Generated hound app
==> example
Compiling 1 file (.ex)
== Compilation error in file lib/example.ex ==
** (ArgumentError) argument error
(stdlib) :ets.lookup(Hound.SessionServer, #PID<0.592.0>)
(hound) lib/hound/session_server.ex:19: Hound.SessionServer.current_session_id/1
(hound) lib/hound/session_server.ex:13: Hound.SessionServer.session_for_pid/2
lib/example.ex:7: Example.run/0
localhost:example alex$ mix test
Compiling 1 file (.ex)
== Compilation error in file lib/example.ex ==
** (ArgumentError) argument error
(stdlib) :ets.lookup(Hound.SessionServer, #PID<0.160.0>)
(hound) lib/hound/session_server.ex:19: Hound.SessionServer.current_session_id/1
(hound) lib/hound/session_server.ex:13: Hound.SessionServer.session_for_pid/2
lib/example.ex:7: Example.run/0
Я где-то забыл шаг или неправильно настроил? Любая помощь очень ценится, спасибо!
1 ответ
Я опустошил
lib/example.ex
и поместил туда следующий код:
defmodule Example do
...
end
Example.run
Есть разница между .ex
файлы и .exs
файлы. Вы решили поместить этот код в основной.ex
файл. Избавьтесь от этой строки:
Example.run
Затем для выполнения Example.run()
ты делаешь это:
.../example$ iex -S mix
iex(1)> Example.run
"Akash Manohar // @HashNuke"
:ok
Или вы можете изменить расширение на .exs
, затем запустите код с этим:
.../example$ mix run lib/example.exs
С другой стороны, если вы хотите mix test
чтобы запустить тест, вы должны поместить тест в каталог test. Например:
defmodule ExampleTest do
use ExUnit.Case
use Hound.Helpers
test "page title is correct" do
Hound.start_session
navigate_to "http://akash.im"
#IO.inspect page_title()
assert page_title() == "Akash Manohar // @HashNuke"
Hound.end_session
end
end
В примере гончая exunit здесь, тоhound_session()
звонок вызвал у меня ошибку:
15:06:33.736 [ошибка] GenServer Hound.SessionServer завершается ** (RuntimeError) не может создать новый сеанс: тайм-аут, проверьте, что веб-драйвер запущен (гончая) lib/hound/session_server.ex:101: Hound.SessionServer.create_session/2