Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как внутри теста выполнить скрипт Autoit и продолжить остальной сценарий? Проблемы с internet explorer 11

autoit
codeception
windows
internet-explorer
webdriver
php
Теги: #<Tag:0x00007f7b61dd5458> #<Tag:0x00007f7b61dd5318> #<Tag:0x00007f7b61dd51d8> #<Tag:0x00007f7b61dd5098> #<Tag:0x00007f7b61dd4f58> #<Tag:0x00007f7b61dd4e18>

(A) #1

Появилась проблема с Internet explorer 11 под windows 10 - при запуске теста с WebDriver, который должен пройти по всем ссылкам на странице - и скачать файлы - вылезает диалоговое окно “Открыть-Сохранить-Сохранить как” убрать его как я понял и включить функцию автозагрузки файлов в Internet explorer 11 невозможно… (возможно настроить на автоматическое открытие файла - но тогда мешает word)… решил прикрутить скрипт Autoit и запускать его после каждого нажатия на ссылку, чтобы он закрывал диалоговое окно… но после выполнения скрипта - тест зависает на первой ссылке.

Отсюда вопрос: Как обойти эти диалоговые окна в internet explorer 11?? и возможно ли запустить скрипт Autoit внутри теста Cest с последующим выполнением сценария… Спасибо!:slight_smile:


(Vassil Chorniy) #2

Всем привет. Что никто не сталкивался с такой проблемой? Тоже не могу побороть.
Вебдрайвером, кликаю на ссылку, затем AutoIt открывает файл, открывается ворд, AutoIt закрывает окно вода и передает фокус IE.
Но дальнейшее выполнение теста не идет. Происходит зависание.
Java:

Process proc = Runtime.getRuntime().exec("d:\\AUTOtest\\DownloadTemplate\\DownloadTemplate.exe");
        WebElement DownloadTemplate = driver.findElement(By.cssSelector("a[data-qtip='скачати шаблон']"));
        (new WebDriverWait(driver, 30))
                .until(ExpectedConditions.visibilityOf(DownloadTemplate));
        DownloadTemplate.click();

    }
    @AfterClass
    public static void tearDown() {
        driver.switchTo().defaultContent();
        WebElement profileButton = driver.findElement(By.id("btnProfile"));
        profileButton.click();
        WebElement logoutButton = driver.findElement(By.xpath("//*[@id='userProfile']/div[2]/a[2]"));
        logoutButton.click();
        driver.quit();
    }
}

И собственно код AutoIT

Sleep(5000)
	Local $hIE = WinGetHandle("[Class:IEFrame]")
	Local $hCtrl = ControlGetHandle($hIE, "", "[ClassNN:DirectUIHWND1]")

	If WinExists($hIE,"") Then
		WinActivate($hIE,"")
		ControlSend($hIE ,"",$hCtrl,"{F6}")          ; Gives focus to Open Button
		Sleep(500)
		ControlSend($hIE ,"",$hCtrl,"{enter}")        ; Submit whatever control has focus
	 EndIf
	 Sleep(3000)

Local $hWnd3 = WinGetHandle("DPT_STROK_PENS (защищенный просмотр) - Word")
   If WinExists($hWnd3,"") Then
		WinActivate($hWnd3,"")
		Sleep(2000)
		WinClose($hWnd3)
	Else
    MsgBox(4096, "", "Окно не существует")
	 EndIf
	 Sleep(2000)
   WinActivate($hIE,"")
   ControlSend($hIE ,"",$hCtrl,"{F6}")
   Exit

Заранее спасибо откликнувшимся


(A) #3

Добавь в код autoit перезагрузку текущей страницы


(Vassil Chorniy) #4

Огромное спасибо!!! прошло
А может подскажешь, как сделать, что бы тест фейлился, если в autoit будет ошибка( например выскочит окно MsgBox(4096, “”, “Окно не существует”) )?
А то теперь получается, что при успешном прохождении все хорошо, а если нет, остается открытым и окно autoit и в джаве тест крутится(подвисает)


(A) #5

Добавь условие if not winexist:)


(Vassil Chorniy) #6

Зачем добавлять if not winexist, если есть if winexist c else, которое выполняется если окна нет?
С меседжом от autoit я в принципе разобрался, просто таймаут на него повесил.
Долго не мог понять как сделать что бы джава тест падал, если в автоит ошибка. Оказалось все просто: добавил в else скрипта aotoit, возврат на браузер и его закрытие. Теперь все работает. Спасибо за подсказки.
Оставлю свой скрипт, может кому пригодится…

AutoIt скрипт
Sleep(5000)
   Local $hIE = WinGetHandle("[Class:IEFrame]")
   Local $hCtrl = ControlGetHandle($hIE, "", "[ClassNN:DirectUIHWND1]")

   If WinExists($hIE,"") Then
	  WinActivate($hIE,"")
	  ControlSend($hIE ,"",$hCtrl,"{F6}")          ; Gives focus to Open Button
	  Sleep(500)
	  ControlSend($hIE ,"",$hCtrl,"{enter}")        ; Submit whatever control has focus
   EndIf
   Sleep(5000)

   Local $hWnd3 = WinGetHandle("DPT_STROK_PENS (защищенный просмотр) - Word")
   If WinExists($hWnd3,"") Then
	  WinActivate($hWnd3,"")
	  Sleep(5000)
	  WinClose($hWnd3)
	  Sleep(2000)
	  WinActivate($hIE,"")
	  ControlSend($hIE ,"",$hCtrl,"{F5}")
   Else
	  MsgBox(4096, "Error", "Окно не существует", 1)
	  WinActivate($hIE,"")
	  WinClose($hIE,"")
   EndIf
   Exit