3

Selenium Server 2.33.0、Selenium Webdriver JS バインディング 2.34.0 (npm パッケージ "selenium-webdriver")、および Mac 10.6.8 での PhantomJS 1.9.1 を使用した認証に問題があります。他の JS バインディング "webdriverjs" と "wd" も同様の結果で試したので、このバインディングでは問題ないと思います。

これを使用して Webdriver をセットアップします。

return new Webdriver.Builder().
    usingServer('http://localhost:4444/wd/hub').
    withCapabilities({
        "browserName": "phantomjs",
        "phantomjs.page.settings.userName":user,
        "phantomjs.page.settings.password":password
    }).build();

次に、Selenium Server ログに次の出力が表示されます。

PhantomJS is launching GhostDriver...
[INFO  - 2013-08-13T21:52:40.240Z] GhostDriver - Main - running on port 28904
[INFO  - 2013-08-13T21:52:40.394Z] Session [acd0ad70-0462-11e3-95df-4b230b17334d] - CONSTRUCTOR - Desired Capabilities:{"phantomjs.page.settings.password":"xxx","browserName":"phantomjs","phantomjs.page.settings.userName":"xxx"}
[INFO  - 2013-08-13T21:52:40.394Z] Session [acd0ad70-0462-11e3-95df-4b230b17334d] - CONSTRUCTOR - Negotiated Capabilities: {"browserName":"phantomjs","version":"1.9.1","driverName":"ghostdriver","driverVersion":"1.0.3","platform":"mac-10.6 (Snow Leopard)-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"},"phantomjs.page.settings.password":"xxx","phantomjs.page.settings.userName":"xxx"}

ネゴシエートされた機能に、指定したユーザーとパスワードが含まれていることがわかります。しかし、http 基本認証を使用する Web サイトでページを開こうとすると、認証に失敗します。

14:43:25.504 INFO - Executing: [find element: By.id: auth-username-field-inputEl] at URL: /session/04627dc2-a16c-42b3-b3dc-48e502f7cfec/element)
14:43:29.410 WARN - Exception thrown org.openqa.selenium.NoSuchElementException: Error Message => 'Unable to find element with id 'auth-username-field-inputEl''

認証されていない localhost Web サイトに対してスクリプトを実行すると、正常に動作します。(Selenium 経由ではなく) Firefox を使用してリモート Web サイトを表示すると、認証してホームページを表示できます。

また、「-w」を使用して Webdriver モードで PhantomJS を実行しようとしましたが、同様の結果が得られました。

このスクリプトをphantomjsで実行すると機能します:

var page=require('webpage').create();
//page.customHeaders={'Authorization': 'Basic '+btoa('xxx:xxx')};
page.settings.userName="xxx";
page.settings.password="xxx";
var callback=function(status){
    if(timer)window.clearTimeout(timer);
    if (status=='success' || status=='timedout') {
        console.log(status);
        console.log(page.plainText);
    }else{
        console.log('Failed to load.');
    }
    phantom.exit();
    };
var timer=window.setTimeout(callback,60000,'timedout');
var url="http://xxx.com";
page.open(url,callback);

この投稿からこのスクリプトをコピーしました。1.9.1 では userName と password が正常に機能することがわかりました。customHeader を設定する必要はありませんでした。Selenium スクリプトで customHeader を試しましたが、違いはありませんでした。これは、GhostDriver の問題である可能性があります。

誰もこれを機能させることができましたか?

4

1 に答える 1