1

現在、WebdriverJS と PhantomJS を使用したアプリケーション テスト スイートの作成に取り組んでいます。テストが確実に機能するように、最初に Chrome 経由でテストを実行すると、すべて正常に機能します。ただし、Chrome を PhantomJS に交換すると、テストが中断されます。

この質問 - WebDriver PhantomJS Unable to find element, but works fine with Firefox - 非常によく似た問題の概要を説明しているように見えますが、同封の解決策は役に立たないようです。

Chrome では機能するが PhantomJS では機能しないタイプの大まかな例を次に示します。

var client = webdriverjs.remote({ 
    desiredCapabilities: {
        browserName: 'chrome'       
    }, 
    logLevel: 'silent' 
});

client.waitForExist("[data-id='1568911']", function(e){
    client.click("[data-id='1568911']", function(e){
        assert(!e, "Should click on a specific element:" + element);
    });
});

PhantomJS で実行するときは、明らかに最初に WebdriverJS オプションを変更します。

var client = webdriverjs.remote({ 
    desiredCapabilities: {
        browserName: 'phantomjs',
        'phantomjs.binary.path': "path/to/phantomjs"
    }, 
    logLevel: 'silent' 
});

しかし、テストを実行して logLevel を「verbose」に設定すると、次のようなエラー メッセージが表示されます。

[12:43:34]:  COMMAND    POST     "/wd/hub/session/eb2b0a4b-e659-4607-bec0-82209bd6539a/element"
[12:43:34]:  DATA        {"using":"css selector","value":"[data-id='1568911']"}
[12:43:35]:  ERROR  UnknownError    An unknown server-side error occurred while processing the command.
        {"errorMessage":"Unable to find element with css selector '[data-id='1568911']'","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"54","Content-Type":"application/json; charset=utf-8","Host":"localhost:12784","User-Agent":"Apache-HttpClient/4.3.2 (java 1.5)"},"httpVersion":"1.1","method":"POST","post":"{\"using\":\"css selector\",\"value\":\"[data-id='1568911']\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/2e1ff0a0-68d7-11e4-ad4c-3105ad572a89/element"}}

「[data-id='1568911']」や「#foo」などの一般的な CSS2+ セレクターが、WebdriverJS を介して PhantomJS で機能しないのはなぜですか? それは PhantomJS のバグですか、WebdriverJS のバグですか、それとも私の実装での間違いですか?

4

1 に答える 1

1

したがって、少なくとも google ページでは、WebdriverJS が userAgent 文字列に何か問題があることを意味するはずです。ただし、元のページと同じ問題というわけではありません。

そんな感じ...

デフォルトの WebdriverJS ユーザー エージェント値は問題ありません。問題 (少なくとも私がテストしていたページでは) は、大まかに次のようなコード ブロックから発生しました。

if(navigator.onLine){ 
    renderPage()
} else doSomethingElse();

PhantomJS は常に navigator.onLine を false に設定しているようです...

https://github.com/ariya/phantomjs/issues/10647

ドー。

そうは言っても、常にオンラインの製品で navigator.onLine 値を使用したい理由が理解できません。他の誰かのコードでしか見られないクラシックの 1 つ...

痛いバグ。

助けてくれてありがとう。

于 2014-11-18T20:21:24.120 に答える