AutoIT для Chrome не работает — обходной путь диалогового окна базовой аутентификации для Selenium WebDriver Automation

Я пытаюсь автоматизировать свои тестовые примеры, используя selenium webdriver в java. Он включает в себя базовые диалоги аутентификации. Чтобы сделать IE, Chrome, FF совместимым с использованием того же подхода, я должен использовать AutoIT. Я закончил с IE и FF, но для Chrome это не работает. Я использую инструмент AutoIT Window Info для определения имени класса и элемента управления. Но Chrome совсем другой, в этом случае кто-нибудь может помочь?

Вот код для работы IE и FF

 $classForBasicAuthenticationWindow = "[CLASS:#32770]"
 $username = "XXXXXX"
 $password = "XXXXXX"

 WinWait($classForBasicAuthenticationWindow,"",120)
 If WinExists($classForBasicAuthenticationWindow) Then
    WinActivate($classForBasicAuthenticationWindow)
    Send($username)
    Send("{TAB}")
    Send($password & "{Enter}")   
  EndIf

Это похоже на FF, выше для IE

Для Chrome я написал это до сих пор, если вы рассмотрите инструмент window info, вы поймете, что всплывающее окно не является другим окном в случае Chrome. Так что это становится немного сложным. В любом случае, вот что я пробовал:

$classForBasicAuthenticationWindow = "[CLASS:Chrome_WidgetWin_1]"
$username = "XXXXX"
$password = "XXXXX"

WinWait($classForBasicAuthenticationWindow,"",120)
If WinExists($classForBasicAuthenticationWindow) Then
WinActivate($classForBasicAuthenticationWindow)
While 1
   $isAuthenticationRequiredVisible = ControlGetHandle($classForBasicAuthenticationWindow, "", "[CLASS:ViewsTextfieldEdit; INSTANCE:2]")
  If $isAuthenticationRequiredVisible <> "" Then 
     MsgBox($isAuthenticationRequiredVisible)
     ExitLoop
  EndIf
WEnd
ControlSend($classForBasicAuthenticationWindow, "", "[CLASS:ViewsTextfieldEdit; INSTANCE:2]", $username)
EndIf

person Dhruvenkumar Shah    schedule 16.11.2012    source источник
comment
На этот вопрос был дан ответ в другом потоке   -  person scottrudy    schedule 25.11.2015


Ответы (3)


Почему вы не открываете свой URL как таковой (передавая учетные данные для входа в URL)

@driver.get "#{username}:#{password}@#{URL}"

пример

@driver.get "user:[email protected]"
person Amey    schedule 16.11.2012
comment
Привет. Я думаю, что это не работает в хроме после версии 19. И для IE вам нужен взлом реестра, для которого в любом случае вам нужен какой-то механизм autoIT. Поэтому для Chrome мне нужно сделать что-то, что не использует пароль и имя пользователя в URL-адресе. Еще одна вещь, предположим, например. этот метод работает, тогда для последующих запросов мне нужно выполнить ту же процедуру или я могу использовать ее непосредственно позже? - person Dhruvenkumar Shah; 20.11.2012

Метод ControlSend принимает Заголовок окна, а не класс окна. Поэтому попробуйте задать Заголовок окна так, как он отображается в инструменте Autoit Window Info Tool.

Код, приведенный ниже, работал у меня.

$titleForBasicAuthenticationWindow = "Window Title As Given in Window Info Tool"
$username = "XXXXX"
$password = "XXXXX"

WinWait($classForBasicAuthenticationWindow,"",120)
If WinExists($classForBasicAuthenticationWindow) Then
 WinActivate($classForBasicAuthenticationWindow)
 ControlSend($classForBasicAuthenticationWindow, "", "[CLASS:ViewsTextfieldEdit; INSTANCE:2]", $username)
EndIf
person Abhishek_Mishra    schedule 19.11.2012
comment
Извините за поздний ответ. но в случае хрома это совершенно другой случай, как если бы вы открыли окно с помощью веб-драйвера, это было бы иначе, чем обычное открытие окна ... но позвольте мне проверить это, спасибо. +1 за вашу помощь. - person Dhruvenkumar Shah; 20.11.2012
comment
Вы должны сначала проверить это, а не говорить, что в хроме это другой случай. Я тоже проверил его на хроме, открыв окно только с помощью веб-драйвера. - person Abhishek_Mishra; 20.11.2012

Для Chrome я пробовал все, лучший способ ввести учетные данные во всплывающем окне базовой HTTP-аутентификации — через AutoIT. вам просто нужно добавить sleep(25000) в начало скрипта. убедитесь, что хром может открыть это всплывающее окно в течение 25 секунд. если нет, то увеличьте время сна.

person SujJi    schedule 10.01.2019