У меня проблемы с аутентификацией при использовании Selenium Server 2.33.0, привязки Selenium Webdriver JS 2.34.0 (пакет npm "selenium-webdriver") и PhantomJS 1.9.1 на Mac 10.6.8. Я также пробовал другие привязки 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:
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''
Если я запускаю свой скрипт на локальном веб-сайте, на котором нет аутентификации, он работает нормально. Если я просматриваю удаленный веб-сайт с помощью Firefox (не через Selenium), я могу пройти аутентификацию и увидеть домашнюю страницу.
Я также пытался запустить PhantomJS в режиме Webdriver, используя «-w», и получаю аналогичный результат.
Это работает, если я запускаю этот скрипт с 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 имя пользователя и пароль работают нормально, мне не нужно было устанавливать customHeader. Я попробовал customHeader в своем скрипте Selenium, но это не имело значения. Это может быть проблема с GhostDriver.
Кто-нибудь смог заставить это работать?