0

系统

OSX v10.13.4 / Elixir v1.6.5 / OTP 19 / Phoenix 1.3.2 / Wallaby 0.19.2 / PhantomJS 2.1

问题

以下代码适用于测试

execute_script(session, "localStorage.setItem('test', 'foo'); return localStorage.getItem('test');")

但是,如果我调用与我的 Phoenix 应用程序get_test()内部调用的函数中完全相同的方法app.js

  function get_test() {
    localStorage.setItem('test', 'foo'); 
    return localStorage.getItem('test');
  }

  window.get_test = get_test

并在我的测试套件中运行以下

execute_script(session, "return get_test();")

我明白了{:error, :obscured}

我已经在相同的代码上尝试过使用 selenium 并且它可以工作。但是,出于某种原因,使用 PhantomJS 似乎找不到我们自己创建的函数。

我错过了什么吗?我确实注意到在小袋鼠的 execute_script 测试中没有调用专门创建的函数的测试。

https://github.com/keathley/wallaby/blob/master/integration_test/cases/browser/execute_script_test.exs

类似的测试 https://github.com/keathley/wallaby/blob/master/integration_test/cases/browser/local_storage_test.exs

其中我添加了以下内容以local_storage_test验证我不会发疯

@function_script """
  function get_tester() {
    localStorage.setItem('tester', 'foo');
    return localStorage.getItem('tester');
  }

  return get_tester();
"""

session
  |> visit("index.html")
  |> execute_script(@function_script, fn(value) -> send self(), {:callback, value} end)

assert_received {:callback, "foo"}

它通过了。这显然是我的应用程序有问题。或者幻影配置也许。

更新:

虽然没有直接提及 - 我已将其范围缩小到libsodim无法使用phantomjs正确加载。回到调试的基础。JS写的没什么问题。积极的一面是,我现在拥有一个很酷的测试库和一些很酷的测试工具。

4

0 回答 0