Временное решение для всплывающего окна печати selenium2 - PullRequest
3 голосов
/ 30 ноября 2011

В настоящее время я работаю над программой, которая с помощью веб-драйвера selenium и firefox сканирует свой путь по доменам, удаляя весь видимый текст в процессе. (программа написана на python)

Когда селен открывает страницы с javascript window.print(), сканер в настоящее время останавливается, ожидая, когда я вручную нажму «закрыть» в появившемся всплывающем окне.

Я попробовал функцию driver.select_pop_up() после задержки, в надежде на возможность закрыть () окно после его выбора. Однако не удалось выбрать окно.

Я читал об этой проблеме, и со этой страницы часто задаваемых вопросов по селену я пришел к выводу, что мне пришлось обойти эту проблему, когда я прочитал:

Для решения этой проблемы вы можете использовать обходной путь (если таковой существует); в противном случае вам, возможно, придется исключить тест из вашего автоматизированного корпуса.

Единственное решение, которое я вижу, - это не открывать веб-страницы со ссылками на описания, содержащими слово «печать», однако я нахожу это уродливым и хотел бы услышать, есть ли у кого-нибудь еще идея получше.

Код, который показывает пример моей проблемы:

from selenium               import webdriver  
import time

skrivutsiden = 'www.alfkvam.no/index.php?id=4849944&cat=159037&printable=1'
vanligside = 'http://www.google.no'

driver = webdriver.Firefox()

driver.get(vanligside)
driver.get(skrivutsiden)

РЕДАКТИРОВАТЬ:

Используя код, предложенный prestomanifesto, мне действительно удалось запустить «всплывающее окно печати» в пустом окне Firefox. Когда код генерирует событие, которое я пытаюсь избежать, я думаю, что это может быть неправильный код в первую очередь? Это неправильно сделанный вывод? Приведенный ниже код создает всплывающее окно:

from selenium               import webdriver  
import time

driver = webdriver.Firefox()
driver.execute_script("window.print() = function() {}")

RE-EDIT:

Причина, по которой вышеприведенный код вызывает всплывающее окно, в том, что я неправильно понял JavaScript - я написал

"window.print () = function () {}"

вместо

"window.print = function () {}"

Это не решило исходную проблему, но объясняет неожиданное всплывающее окно, появившееся в первом редактировании.

мои извинения до манифеста

RE-EDIT:

Попробовал обновить решения. Я нашел этот сайт , где увидел следующую строку кода:

((JavascriptExecutor)m_driver).executeScript("window.confirm = function(msg){return
false;};");

Исходя из этого, я попробовал следующее безрезультатно:

driver.execute_script("window.print = function(msg) {return false;};")

Ответы [ 2 ]

5 голосов
/ 10 декабря 2011

Я наконец нашел решение:

Я вставил

    "print.always_print_silent": "true",
    "print.show_print_progress": "false",

в профиль пользователя Firefox.Selenium имеет собственный профиль пользователя по умолчанию, который вы можете редактировать.Файл, содержащий профиль, называется firefox_profile.py

Обратите внимание, что это просто позволяет печатать без запроса пользователя в виде всплывающего окна.Это работает для меня, потому что у меня нет подключенного принтера.

Я нашел их в строках кода во введении для дополнения r-kiosk .

2 голосов
/ 30 ноября 2011

Вы можете попробовать обходной путь, который существовал для alert сообщений до того, как Selenium смог их поддержать.По сути, вы хотите переопределить функцию print, чтобы она ничего не делала.

Таким образом, вы бы сделали что-то вроде в начале ваших тестов :

driver.execute_script("window.print = function() {}");

(Извините, если код неправильный, я не очень часто использую python).

Таким образом, когда страница вызывает window.print(), ничего не произойдет, и ваш тест может продолжаться непрерывно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...