2

Есть ли способ указать имя пользователя и пароль для базового диалога auth в IE с использованием Selenium Webdriver? Передача учетных данных в URL-адресе не является для нас вариантом.Selenium Webdriver и Basic Auth в IE

+0

ли кто-нибудь найти решение для этого? – Tejas

+0

@ Napster нет, я использую кодированный интерфейс теперь из-за этого ограничения – SB2055

+0

кодированный пользовательский интерфейс? означает, что вы изменили поведение сервера, чтобы не использовать базовую аутентификацию или что-то еще? извините, я не получил его – Tejas

ответ

3

У меня есть решение для этой эпической проблемы

Используйте awt !!

Открыть URL и использовать класс Java Robot или класс SmartRobot приведены ниже:

class SmartRobot extends Robot { 

public SmartRobot() throws AWTException 
{ 
super(); 
} 

/*public void pressEnter() 
{ 
keyPress(KeyEvent.VK_ENTER); 
delay(50); 
keyRelease(KeyEvent.VK_ENTER); 
} */ 

public void pasteClipboard() 
{ 
keyPress(KeyEvent.VK_CONTROL); 
keyPress(KeyEvent.VK_V); 
delay(50); 
keyRelease(KeyEvent.VK_V); 
keyRelease(KeyEvent.VK_CONTROL); 
} 

public void type(String text) 
{ 
writeToClipboard(text); 
pasteClipboard(); 
} 

private void writeToClipboard(String s) 
{ 
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
Transferable transferable = new StringSelection(s); 
clipboard.setContents(transferable, null); 
} 
} 

и использовать этот класс что-то вроде ....

try{ 
      SmartRobot robot = new SmartRobot(); 
      robot.type(username); 
      robot.keyPress(KeyEvent.VK_TAB); 
      robot.type(password); 
      robot.keyPress(KeyEvent.VK_ENTER); 
     }catch(Exception AWTException){ 
     System.out.println("Exception " + AWTException.getMessage()); 
     } 

решение работает как шарм , без каких-либо сторонних инструментов, таких как AutoIt или Sikuli.

+1

Это похоже на мой метод обработки базового auth в IE. Тем не менее, я обнаружил, что IE <9 Я могу передать url с пользователем: pass @ используя http-аутентификацию. С IE> = 9 мне нужно было перейти в обычный url, а затем использовать driver.switchTo(). Alert(), чтобы начать использовать Robot для ввода учетных данных пользователя/пароля. – Lukus

+0

Этот метод не работает в Firefox/Chrome/Safari. У вас есть идея по этому поводу? Эти методы точно имитируют поведение человека. и мне нужно сделать то же самое со всеми браузерами, отправка параметров в url показывает страницу с ошибкой моего SSO (shibboleth) из-за отсутствия файлов cookie. Только это решение с IE работает как шарм! – Tejas

0

Вы пробовали использовать старый добрый старый пароль и пароль в URL-адресе?

driver.get("http://username:[email protected]"); 

Это действительно работает для меня в Firefox и Chrome. Я не тестировал IE, потому что я нахожусь на linux

+1

Это не будет работать в IE, если вы не измените настройки реестра (у которого есть свои оговорки): http://stackoverflow.com/a/4105642/4985326 и http://stackoverflow.com/a/23519791/4985326 – Anon

2

Фактически, если вы находитесь в Windows и используете, кроме Java, для написания автоматизации, AutoItX3 - очень хороший вариант.

Вы должны быть зарегистрированы AutoItX3.dll для Windows:

> regsvr32 AutoItX3.dll 

И создать его экземпляр где-то в коде:

require 'win32ole' 
@ai = ::WIN32OLE.new('AutoItX3.Control') 

Вот Рубин/Watir-WebDriver образец основной метод аутентификации:

def basic_auth(browser, user, pswd, url) 
    user_name, pass_word, login_button, login_title = get_basic_auth_control_indexes 

    a = Thread.new { 
     browser.goto(url) 
    } 

    if @ai.WinWait(login_title, "", 90) > 0 
     @ai.WinActivate(login_title) 
     @ai.ControlSend(login_title, '', "[CLASS:Edit; INSTANCE:#{user_name}]", '!u') 
     @ai.ControlSetText(login_title, '', "[CLASS:Edit; INSTANCE:#{user_name}]", @user) 
     @ai.ControlSetText(login_title, '', "[CLASS:Edit; INSTANCE:#{pass_word}]", @pass.gsub(/!/, '{!}')) 
     @ai.ControlClick(login_title, "", "[CLASS:Button; INSTANCE:#{login_button}]") 
    else 
     puts("Basic Auth Login window '#{login_title}' did not appear.") 
    end 

    a.join 
    end 

Способы обработки: Этот в настоящее время o олько знает Chrome для Win XP и Win 7

def get_basic_auth_control_indexes 
    case $win_major 
     when '5' # XP 
     ['2','3','1','Connect to'] 
     when '6' # Win 7 
     ['1','2','2','Windows Security'] 
    end 
    end 

Конечно, это Windows, конкретны:

def get_windows_version 
    ver = `ver`.gsub("\n", '') 
    mtch = ver.match(/(.*)\s\[Version\s*(\d+)\.(\d+)\.(\d+)\]/) 
    $win_name = mtch[1] 
    $win_major = mtch[2] 
    $win_minor = mtch[3] 
    $win_build = mtch[4] 
    $win_version = "#{$win_major}.#{$win_minor}.#{$win_build}" 
    end 
Смежные вопросы