現在、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 のバグですか、それとも私の実装での間違いですか?