

yesodでselenium webdriverを使ったテストを行いたいです.

以下のようなテストは動作しました.

[code]

    it "webdriverのロードチェック" $ do
        title <- liftIO $ runSession (def :: WDConfig) $ do
            openPage "https://google.co.jp"
            getTitle
        assertEq "title" "Google" title
    
[/code]

その後,とりあえず`localhost:3000`にアクセスするテストを書いてみたのですが,そんなサーバはないということで接続できず失敗してしまいます.

approotは`localhost:3000`にしているのですが…

テスト中のURLを知りたいと思って`getUrlRender`を使って`putStrLn`してみようと思いましたが型が意味不明になって諦めました.

* * *

コメントだと文字数超過になってしまうのでこちらに追記します.

失敗するテストケースを以下に追記します.

`Home.hs`は

[code]

    getHomeR :: Handler Html
    getHomeR = do
        defaultLayout $ do
            setTitle "HOME"
            $(widgetFile "home")
    
[/code]

`HomeSpec.hs`は

[code]

    spec :: Spec
    spec = withApp $ do
        it "webdriverのロードチェック" $ do
            title <- liftIO $ runSession (def :: WDConfig) $ do
                openPage $ "http://localhost:3000"
                t <- getTitle
                closeSession
                return t
            assertEq "title" "HOME" title
    
[/code]

になっていて,実際ブラウザは起動するのですが,サーバーに接続できませんというエラーが出てくる状態です.

エラーは以下のようになっております.

[code]

    test/Handler/HomeSpec.hs:8: 
    1) Handler.Home webdriverのロードチェック
         uncaught exception: FailedCommand (FailedCommand UnknownError 
         Session: SessionId "18939a04-1e84-4f18-8eea-46418d5d4f60" at "127.0.0.1":4444
         org.openqa.selenium.WebDriverException: Reached error page: about:neterror?e=connectionFailure&u=http%3A//localhost%3A3000/&c=UTF-8&f=regular&d=localhost%3A3000%20%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A%E3%82%92%E7%A2%BA%E7%AB%8B%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82
         Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
         System info: host: 'Unknown', ip: 'Unknown', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.16-gentoo', java.version: '1.8.0_131'
         Driver info: org.openqa.selenium.firefox.FirefoxDriver
         Capabilities [{moz:profile=/tmp/rust_mozprofile.DDlePRCG2AFm, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, proxy=Proxy(system), specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=54.0, platformVersion=4.9.16-gentoo, moz:processID=19730.0, browserName=firefox, javascriptEnabled=true, platformName=linux}]
         Session ID: 2930f19c-906e-4841-9f1c-ce7e11cfa73a
           sun.reflect.NativeConstructorAccessorImpl.newInstance0 (NativeConstructorAccessorImpl.java:-2)
           sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
           sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
           java.lang.reflect.Constructor.newInstance (Constructor.java:423)
           org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException (W3CHttpResponseCodec.java:150)
           org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode (W3CHttpResponseCodec.java:115)
           org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode (W3CHttpResponseCodec.java:45)
           org.openqa.selenium.remote.HttpCommandExecutor.execute (HttpCommandExecutor.java:164)
           org.openqa.selenium.remote.service.DriverCommandExecutor.execute (DriverCommandExecutor.java:82)
           org.openqa.selenium.remote.RemoteWebDriver.execute (RemoteWebDriver.java:637)
           org.openqa.selenium.remote.RemoteWebDriver.get (RemoteWebDriver.java:364)
           sun.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2)
           sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
           sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
           java.lang.reflect.Method.invoke (Method.java:498)
           org.openqa.selenium.support.events.EventFiringWebDriver$2.invoke (EventFiringWebDriver.java:104)
           com.sun.proxy.$Proxy4.get (:-1)
           org.openqa.selenium.support.events.EventFiringWebDriver.get (EventFiringWebDriver.java:163)
           org.openqa.selenium.remote.server.handler.ChangeUrl.call (ChangeUrl.java:40)
           org.openqa.selenium.remote.server.handler.ChangeUrl.call (ChangeUrl.java:25)
           java.util.concurrent.FutureTask.run (FutureTask.java:266)
           org.openqa.selenium.remote.server.DefaultSession$1.run (DefaultSession.java:176)
           java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
           java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617)
           java.lang.Thread.run (Thread.java:748)
         )
    
[/code]


CC BY-SA 3.0
2017-06-21T06:55:23.233
35773
2020-12-24T08:06:20.653
2017-06-22T08:30:30.497
12216
12216
question
haskell selenium
yesodでselenium webdriverを使ったテストを行いたい


落ちるテストのコードがないためこちらの推測になってしまいますが、  
`spec = withApp $ do` などでサーバーを起動した状態になっていますでしょうか。  
そのコードでyesodのサーバーを起動した状態で、`openPage "http://localhost:3000"` を呼べば動くのではないでしょうか。

こちら参考になれば  
<http://qiita.com/jabaraster/items/6cfb39776cbac9cfd3e0#%E3%83%86%E3%82%B9%E3%83%88%E6%9C%AC%E4%BD%93>


CC BY-SA 3.0
2017-06-21T07:14:03.723
35775
2017-06-21T07:14:03.723
23934
35773
answer