Установить учетные данные программно с помощью JUnit и Selenium-RC - PullRequest
2 голосов
/ 15 февраля 2011

Я должен протестировать приложение, используя селен. Само приложение аутентифицируется на активном сервере каталогов. Все учетные записи имеют форму «username@domain.tld». Я должен использовать тесты Java JUnit (4.x), которые используют клиентские библиотеки selenium java.

К сожалению, я не могу установить имя пользователя и пароль непосредственно в URL. Насколько я знаю, знак @ должен быть закодирован в URL.

selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://username%64domain.tld:password@server/appbase");

Все, что я получаю, это некоторые исключения для авторизации:

com.thoughtworks.selenium.SeleniumException: XHR ERROR: URL = http://username%64domain.tld:password@server/appbase/mapage Response_Code = 401 Error_Message = Unauthorized

Есть ли способ установить учетные данные пользователя (для пользователя с заданной схемой именования) в URL? Существуют ли другие способы предоставления учетных данных пользователя программно?

Заранее спасибо за любой ответ (ы)

С уважением, Марко

Ответы [ 2 ]

3 голосов
/ 15 февраля 2011

Недавно я изучал возможность аутентификации в Selenium и узнал, что подобная аутентификация по URL-адресу в большинстве браузеров устарела из-за соображений безопасности.

Наше решение (с запущенным selenium rc 1.0.3) было написать функцию в user-extensions.js, которая искала элемент управления для входа (используя имя класса) и, если он найден, вставляет идентификатор и пароль и входит в систему. Это, конечно, зависит от использования проверки подлинности с помощью форм, поэтому цепочка запросов:

  1. попробуйте получить вашу страницу
  2. если не залогинен, перенаправить на страницу входа
  3. выполнить вход
  4. если аутентифицирован, перенаправьте на ваш страница снова

-

Selenium.prototype.doTryLogin = function(locator, text ) {
/**
* Tries to log in into a forms authentication site
* using the supplied locator and finding the first input[text]
* element for login name, the first input[password] element
* as password and the first input[submit] as submit button.
* Use TryLoginAndWait to ensure logging in is performed before
* next test step. 
*
* @param locator the DOM container for login, password and button
* @param text part of login page name to check for
*
*/  

// Check if the user has been redirected due to authentication
var location = this.getLocation().toLowerCase();

if (location.indexOf(text) > -1) {
    this.doSetLoginName(locator + ' input[type=text]');
    this.doSetPassword(locator + ' input[type=password]');
    this.doClick(locator + ' input[type=submit]');
}
else {
    this.doRefresh();
}
 }


Selenium.prototype.doSetLoginName = function(locator, text ) {
    var element = this.page().findElement(locator);
    this.page().replaceText(element, 'your_id');
}

Selenium.prototype.doSetPassword = function(locator, text )
    var element = this.page().findElement(locator);
    this.page().replaceText(element, 'the_password');
}
0 голосов
/ 10 марта 2011

Magomi,

Недавно мы столкнулись с той же проблемой (включая имена пользователей, являющиеся адресами электронной почты и необходимость их кодирования);

Описанное решение: http://wiki.openqa.org/display/SEL/Selenium+Core+FAQ#SeleniumCoreFAQ-HowdoIuseSeleniumtologintositesthatrequireHTTPbasicauthentication%28wherethebrowsermakesamodaldialogaskingforcredentials%29%3F

принципиально правильно, однако ему не хватает какой-то детализации, поэтому ваш подход не удался.

Мы получили его с помощью: (по вашему примеру): a) config / setup: только базовый URL селена без учетных данных b) запустите все тесты с помощью следующей команды: open http://username%64domain.tld:password@server/appbase

С этого момента Selenium (на самом деле это браузер в текущем сеансе) будет отправлять все последующие запросы, включая вышеуказанные учетные данные, и ваш AUT будет работать нормально ;-)

regards georg

PS: использование вышеуказанного метода в Selenium-IDE все равно потребует от вас щелкнуть всплывающее окно;это всплывающее окно, однако, не проблема с последним Selenium-RC

...