Перейти к содержимому

Фотография

Не могу закрыть окно


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 25 июня 2013 - 09:05

Здравствуйте!

Возникла проблема при закрытии окна в системе Debian.
Имеются 2 теста. В конце каждого теста проверяется печать договора. Как это происходит:
1. Нажимаем на кнопку "Напечатать", открывается 2 окна, одно с договором, второе - системное, для выбора принтера, числа копий и т.д
2. Системное окно я обрабатываю (посылаю либо Esc, либо Alt+F4)
3. Переключаюсь на окно с договором
4. Проверяю правильность договора
5. Закрываю окно с договором
6. Переключаюсь на основное окно, где начинается второй тест

Суть в том, что под Windows обработка и переключение окон отрабатывают корректно, под Debian - нет. Код:
void checkOrderPrintPage(Map orderParams, Class pageClass) {
        def handle = selenium.getHandle()
        selenium.click("//input[@value='Напечатать']")
        selenium.waitForPopUp("mywindow", 30000)
        Robot robot = new Robot()
        robot.keyPress(VK_ESCAPE) // закрыли системное окно
        robot.keyRelease(VK_ESCAPE)
        selenium.selectWindow("mywindow")
        // тут проверка договора
        selenium.close()
        selenium.selectWindow(handle)

Небольшая проверочка перед выполнением каждого теста:
@BeforeMethod
    void countWin() {
        def handle = selenium.getHandle()
        def countWindows = selenium.driver.getWindowHandles().size()
        System.out.println(countWindows) // после первого теста тут "2"
        if (countWindows > 1) {
            selenium.selectWindow("mywindow")
            System.out.println("Переключились на окно с печатью!")
            // selenium.close() // не работает
            Robot robot = new Robot()
            robot.keyPress(VK_ALT)
            robot.keyPress(VK_F4)
            robot.keyRelease(VK_F4)
            robot.keyRelease(VK_ALT)
            selenium.selectWindow(handle)
            System.out.println(countWindows) // тут по прежнему "2"
        }
    }
Т.е ни close(), ни Alt+F4 это окно закрыть не могут.
Подскажите как это можно обойти, или возможно я что-то не так делаю.
Скрины окон под Windows и Debian прилагаю.
Спасибо!
Прикрепленный файл  debianPrint.png   144,65К   36 Количество загрузок:
Прикрепленный файл  windowsPrint.png   119,22К   29 Количество загрузок:
  • 0

#2 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 27 июня 2013 - 10:44

Забыл сказать, что при подключении "иксов" все работает, т.е окно закрывается. А без "иксов" не хочет.
  • 0

#3 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 27 июня 2013 - 18:58

Все никак не получается у меня решить эту проблему. Сомневался в имени popup ("mywindow"), но сегодня после написания метода в котором в цикле пробегаемся по всем окнам, и делаем removeAll() всез окон, кроме popup, сомнения отпали. Поигрался с проверками текста в popup. Я так понимаю, проверки могут выполняться только в активных окнах? Или нет? Если да, то переключение в popup - 100%, а вот закрыть никак не получается.
  • 0

#4 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 27 июня 2013 - 19:08

Пробовали включать/выключать нативные события?
  • 0

#5 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 27 июня 2013 - 19:20

Как вариант workaround, можно поиграться с конфигами профиля браузера (about:config, группа параметров print). Например, не использовать нативное принт окно или вообще его не выводить.
  • 0

#6 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 28 июня 2013 - 04:33

neman, спасибо за наводку, сегодня буду пробовать.
  • 0

#7 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 28 июня 2013 - 10:37

Увы, пока не получилось решить проблему.
Во-первых попробовал включать/выключать нативные события
FirefoxProfile profile = new FirefoxProfile(new File(params.profileDir.toString()))
profile.setEnableNativeEvents(false) // true
Не помогло.
Во-вторых я все таки нашел выход как избежать появления системного окна печати.
Для этого в адресной строке Firefox пишем about:config Далее, в строке поиска пишем print.always_print_silent В случае, если ничего не находит, вручную создаем этот логический ключ со значением true. И еще, на всякий случай я изменил print.show_print_progress с true на false. И О Чудо! После подключения иксов, ручками в приложении нажал "Напечатать", и окно с выбором принтера не появилось. НО!!! При выполнении тестов, оно продолжает появляться. Если я правильно понимаю, при старте FF, драйвер каждый раз создает новый чистенький профиль, если тот конкретно не задан в коде. Но у меня то он задан!!! (см. код выше). Выполнив firefox -p запускаю браузер со своим профилем, который у меня используется в тестах (ff-profile). В браузере, выполняю about:config, вижу тот ключ что я добавил, с правильным значением. Теперь непонятно, почему эти настройки в тестах не применяются? Или я как то профиль не так создаю?

Вот как у меня реализовано:
FirefoxProfile profile = new FirefoxProfile(new File(params.profileDir.toString()))
profile.setEnableNativeEvents(false)
DesiredCapabilities capability = DesiredCapabilities.firefox()
driver = new RemoteWebDriver(new URL("http://192.168.123.111:4444/wd/hub"),capability)
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS)
driver.manage().window().setSize(new Dimension(1440, 900))

  • 0

#8 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 28 июня 2013 - 11:55

После выполнения кода
Writer writer = new PrintWriter(System.out, true);

getAdditionalPreferences().writeTo(writer);

writer.flush()
выяснилось, что настройка не подцепилась к профилю, в списке ее нет. Теперь вопрос, как ее подцепить
  • 0

#9 neman

neman

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 28 июня 2013 - 12:32

Попробуйте настроить профиль на лету:
profile.setPreference("print.always_print_silent", true);

PS: Если при выставлении print.always_print_silent = true не появляется окно печати - на чудо по мне так не очень тянет :) Вот если наоборот..
  • 0

#10 PunkLiner

PunkLiner

    Новый участник

  • Members
  • Pip
  • 73 сообщений


Отправлено 28 июня 2013 - 14:01

Все! Ура! Проблема решена! Да, neman, Вы правы, необходимо подключать таким образом (хотя есть еще способ создавать файлик prefs.js и туда эти ключи пихать). Правда, признаться честно я пришел к этому до чтения вашего сообщения, но все равно спасибо Вам за помощь. А еще, одна из причин - это то, что профиль то этот я нигде дальше не использовал после создания :biggrin: . Я использую Grid, и забыл прописать одну важную строчку
FirefoxProfile profile = new FirefoxProfile(new File(params.profileDir.toString()))
profile.setPreference("print.always_print_silent", true)
profile.setPreference("print.show print progress", false)
profile.setEnableNativeEvents(false)
DesiredCapabilities capability = DesiredCapabilities.firefox()
capability.setCapability("firefox_profile", profile.toJson()) // Та самая важная строчка
driver = new RemoteWebDriver(new URL("http://192.168.123.111:4444/wd/hub"),capability)
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS)
driver.manage().window().setSize(new Dimension(1440, 900))

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных