2015-02-16 3 views
0

У меня есть веб-приложение с проверкой подлинности браузера, прежде чем веб-страница загружается, поэтому в автоматическом тесте я регистрируюсь через http://user:[email protected], но когда я ввожу неправильные учетные данные, всплывающее окно не исчезнет, ​​оно будет ждать правильных учетных данных. Но я хочу, чтобы проверить, есть ли доступ к веб-странице с неправильными учетными данными, каждый браузер закрывается без проблем, но IE бросает modal dialog presentКак закрыть аутентификацию в Selenium IE webdriver?

я пытался использовать

driver.SwitchTo().Alert().Dismiss(); 

но это не Работа. любая идея, как закрыть эту всплывающую проверку подлинности?

ответ

2

Authentication popup НЕ генерируется Javascript/это не предупреждение javascript. Таким образом, WebDriver не может обрабатываться.

Вы не упомянули язык программирования, который используете. Ваш пример кода, похоже, находится на C#. В Java - у нас есть java.awt.Robot для имитации событий клавиатуры. Возможно, вам придется найти эквивалент C#, чтобы нажать клавишу ESC.

Robot robot = new Robot(); 
    //Press ESC key 
    robot.keyPress(InputEvent.VK_ESCAPE); 
    robot.keyRelease(InputEvent.VK_ESCAPE); 
0

В проекте, в котором я сейчас работаю, я решил использовать совершенно другой подход. У меня была аналогичная ситуация с аутентификацией NTLM, но я уверен, что для базовой проверки подлинности она также будет работать. Я написал простое расширение хром, которое использует прослушиватель на chrome.webRequest.onAuthRequired. Кроме того, добавив дополнительные методы в сценарий контента для связи с фоновым скриптом, мне удалось изменить учетные данные «на лету», не заботясь о раздражающих окнах.

background.js:

var CurrentCredentials = { 
 
    user: undefined, 
 
    password: undefined 
 
} 
 

 
chrome.runtime.onMessage.addListener(function(request) { 
 
    if(request.type === 'SET_CREDENTIALS') { 
 
     CurrentCredentials.user = request.user; 
 
     CurrentCredentials.password = request.password; 
 
    } 
 
}); 
 

 
chrome.webRequest.onAuthRequired.addListener(function(details, callback) { 
 
    if(CurrentCredentials.user !== undefined && CurrentCredentials.password !== undefined) { 
 
      return {authCredentials: 
 
      { 
 
       username: CurrentCredentials.user, 
 
       password: CurrentCredentials.password 
 
      } 
 
     }; 
 
    } 
 
}, {urls: ["http://my-server/*"]}, ["blocking"]);

и контент-script.js:

var port = chrome.runtime.connect(); 
 

 
window.addEventListener("message", function(event) { 
 
    if (event.source !== window) 
 
    return; 
 

 
    if (event.data.type && (event.data.type === 'SET_CREDENTIALS')) { 
 
    chrome.runtime.sendMessage({ 
 
     type: 'SET_CREDENTIALS', 
 
     user: event.data.user, 
 
     password: event.data.password 
 
    }); 
 
    } 
 
}, false);

Удлинитель должен быть упакован, как CRX и добавляют к ChromeOptions до инициализации драйвера. Кроме того, требуется установить учетные данные перед фактическим вызовом на сайт, которому требуется аутентификация, поэтому я просматриваю простой файл html на диске и размещаю хром-сообщение, находясь на странице: window.postMessage({type: 'SET_CREDENTIALS', user: arguments[0], password: arguments[1]}, '*') с использованием метода IJavascriptExecutor.ExecuteScript. После того, как это будет сделано, окно проверки подлинности не появится, и пользователь выполнит аутентификацию, как ожидалось.

Смежные вопросы