Capybara Poltergeist在使用路径助手时被迫使用https

时间:2016-12-14 03:36:46

标签: capybara poltergeist

Poltergeist无法连接到服务器。这是我得到的错误:

 Failure/Error: visit root_path

 Capybara::Poltergeist::StatusFailError:
   Request to 'http://127.0.0.1:58638/' failed to reach server, check DNS and/or server status

我已经打开了phantomjs调试输出,这对我来说就像是相关的行:

2016-12-14T14:24:47 [DEBUG] WebpageCallbacks - getJsConfirmCallback
{"command_id":"5eab3091-26bd-47b7-b779-95ec9523fb5b","response":true}
{"id":"1069af41-1b7c-4f5b-a9c7-258185aa8c73","name":"visit","args":["http://127.0.0.1:58638/"]}
2016-12-14T14:24:47 [DEBUG] WebPage - updateLoadingProgress: 10
2016-12-14T14:24:48 [DEBUG] Network - Resource request error: QNetworkReply::NetworkError(ConnectionRefusedError) ( "Connection refused" ) URL: "https://127.0.0.1/"
2016-12-14T14:24:48 [DEBUG] WebPage - updateLoadingProgress: 100
2016-12-14T14:24:48 [DEBUG] WebPage - setupFrame ""
2016-12-14T14:24:48 [DEBUG] WebPage - setupFrame ""
2016-12-14T14:24:48 [DEBUG] WebPage - evaluateJavaScript "(function() { return (function () {\n      return typeof __poltergeist;\n    })(); })()"
2016-12-14T14:24:48 [DEBUG] WebPage - evaluateJavaScript result QVariant(QString, "undefined")
{"command_id":"1069af41-1b7c-4f5b-a9c7-258185aa8c73","error":{"name":"Poltergeist.StatusFailError","args":["http://127.0.0.1:58638/",null]}}
{"id":"cbe42cdc-58db-49c5-a230-4a1f4634d830","name":"reset","args":[]}

这一点似乎是一个线索Network - Resource request error: QNetworkReply::NetworkError(ConnectionRefusedError) ( "Connection refused" ) URL: "https://127.0.0.1/"并且它可能是一个ssl错误,所以我添加了phantomjs选项--ignore-ssl-errors=true,但它对响应没有任何影响。

我切换到capybara-webkit,看看是否会提供更多信息,就像有些人推荐的那样。我得到一个非常类似的错误:

"Visit(http://127.0.0.1:64341/)" started page load
Started request to "http://127.0.0.1:64341/"
Finished "Visit(http://127.0.0.1:64341/)" with response "Success()"
Started request to "https://127.0.0.1/"
Received 301 from "http://127.0.0.1:64341/"
Received 0 from "https://127.0.0.1/"
Page finished with false
Load finished
Page load from command finished
Wrote response false "{"class":"InvalidResponseError","message":"Unable to load URL: http://127.0.0.1:64341/ because of error loading https://127.0.0.1/: Unknown error"}"
Received "Reset()"
Started "Reset()"
undefined|0|SECURITY_ERR: DOM Exception 18: An attempt was made to break through the security policy of the user agent.

在@ thomas-walpole的帮助下,我意识到,如果我特定一个非https url访问capybara,它可以工作。 E.g visit "http://localhost:3000"它有效。使用visit root_url有效,但使用visit root_path我会转到https和上面的错误。

config.force_ssl不是真的。我已在config.force_ssl = false中设置config/environments/test.rb,并在测试的上下文中使用pry检查Application.config

非常感谢任何关于道路助手为何通过https发送的想法。

1 个答案:

答案 0 :(得分:0)

您的应用将请求重定向到https,但Capybara不会运行支持https的应用。如果它是rails应用程序,您可能已在应用程序中启用了#include <stdio.h> #define N 10 int count[N + 1]; // count[n] keeps track of the number of times each fib(n) is called int fib(int n) { count[n]++; if(n <= 1) return n; else return fib(n - 1) + fib(n - 2); } int main() { for(int i = 0; i <= N; i++) { count[i] = 0; // initialize count to 0 } fib(N); // print values of count[] for(int i = 0; i <= N; i++) { printf("count[%d] = %d", i, count[i]); } } 选项 - 在测试环境中将其设置为config.force_ssl。如果这不能解决问题,那么你必须浏览你的应用程序,看看为什么它会在测试模式下重定向并关闭这种行为。