Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Активация flash player в selenium webdriver

webdriver
python
selenium
Теги: #<Tag:0x00007fedbfd08180> #<Tag:0x00007fedbfd09fa8> #<Tag:0x00007fedbfd0fe58>

(Andrey Kuzmin) #1

Коллеги, добрый день!
Есть вопрос, есть приложение которое необходимо мониторить. Написал скрипт на python с иcпользованием selenium. На моей локальной машине все запускается нормально (запускал для отладки в pycharm, тест проходит.
При запуске на сервере без Х не работает. Валится при логине в систему (сделал скрин в момент возникновения ошибки).

Вот часть скрипта:

-- coding: utf-8 --

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
from selenium import webdriver
from selenium.webdriver import FirefoxProfile
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.webdriver import WebDriver
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import unittest, time, re, logging, os
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
cap = DesiredCapabilities.FIREFOX
cap[“unexpectedAlertBehaviour”] = “accept”
profile = webdriver.FirefoxProfile()
profile.set_preference(“plugin.state.flash”, 2)
profile.set_preference(“dom.ipc.plugins.enabled.libflashplayer.so”,“true”)
##LOGIN SITE
driver = webdriver.Firefox(profile)
log_callisto = open(“log.log”, “w”)
driver.get(“http://10.168.204.72:8080/”)
try:
elemLogin = WebDriverWait (driver, 10).until(
EC.presence_of_element_located((By.ID, “login”))
)
elemLogin.send_keys(“guest”)
driver.find_element_by_id(“password”).send_keys(“Qwerty123”)
driver.find_element_by_id(“submitter”).click()
except TimeoutException:
log_callisto.write(“ERROR: Not login”)
driver.quit()

print(“ERROR: Not login”, log.tell())

time.sleep(5)
driver.switch_to.frame(‘menu’)
Прошу посоветовать как правильно включить flash player.

Используются:
Mozilla Firefox 59.0
selenium (3.11.0)
gecokdriver 0.20


(Andrey Kuzmin) #2

Пробовал поменять браузер:

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("–headless")
prefs = {“profile.default_content_setting_values.plugins”: 1,
“profile.content_settings.plugin_whitelist.adobe-flash-player”: 1,
“profile.content_settings.exceptions.plugins.,.per_resource.adobe-flash-player”: 1,
“PluginsAllowedForUrls”: “http://10.168.204.72:8080/”}
chrome_options.add_experimental_option(“prefs”, prefs)

driver = webdriver.Chrome(chrome_options=chrome_options)

Тоже самое.


(Timur Nurlygayanov) #3

Python + selenium? )

Попробуй PhantomJS:

browser = webdriver.PhantomJS(executable_path=’/tests/phantomjs’,
desired_capabilities=dict(webdriver.DesiredCapabilities.PHANTOMJS),
service_args=[’–web-security=no’, ‘–ssl-protocol=any’, ‘–ignore-ssl-errors=yes’],
service_log_path = ‘/tmp/phantomjs.log’)

ну и здесь должен лежать бинарник phantomjs: /tests/phantomjs

Для Chrome тебе надо добавить опции:

chrome_options.binary_location = ‘/usr/bin/google-chrome-stable’
chrome_options.add_argument(’–headless’)
chrome_options.add_argument(’–no-sandbox’)
chrome_options.add_argument(’–log-level=DEBUG’)

Для Firefox:

firefox_options.binary = ‘/usr/bin/firefox’
firefox_options.add_argument(’-headless’)
firefox_options.set_preference(‘dom.disable_beforeunload’, True)
firefox_options.set_preference(‘browser.tabs.warnOnClose’, False)

Еще не все версии селениума и браузеров совместимы, вот такая комбинация работает:
Google chrome Google Chrome 65.0.3325.181
ChromeDriver 2.36.540471 (9c759b81a907e70363c6312294d30b6ccccc2752)


(Andrey Kuzmin) #4

Спасибо, Тимур. Сейчас попробую и отпишусь.


(Andrey Kuzmin) #5

Добавил опции
firefox_options.binary = ‘/usr/bin/firefox’
firefox_options.add_argument(’-headless’)
firefox_options.set_preference(‘dom.disable_beforeunload’, True)
firefox_options.set_preference(‘browser.tabs.warnOnClose’, False)
ситуация не поменялась) все тоже самое


(Ильдар Бекмансуров) #6

а если еще к тем опциям в хроме добавить

chrome_options.add_argument("–allow-outdated-plugins")


(Timur Nurlygayanov) #7

а что в логах браузера?


(Andrey Kuzmin) #8

Коллеги, ничего не выходит) все тоже самое) логов браузера нет. Есть только логи geckodriver


(Eugene Stogniy) #9

Возможно это подойдет

Но Селениум не лучший инструмент для тестирования Флеша
если есть большая необходимость именно тестировать Флеш - советую посмотреть на Ranorex


(Andrey Kuzmin) #10

Евгений, мне не надо тестировать) я хочу приспособить для мониторинга


(Andrew Legionov) #11

У меня Selenide. Как включить flash:

Chrome:
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put(“profile.default_content_setting_values.plugins”, 1);
prefs.put(“profile.content_settings.plugin_whitelist.adobe-flash-player”, 1);
prefs.put(“profile.content_settings.exceptions.plugins.,.per_resource.adobe-flash-player”, 1);
prefs.put(“PluginsAllowedForUrls”, “https://domain.com/*”);
chromeOptions.setExperimentalOption(“prefs”, prefs);

Firefox:
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference(“plugin.state.flash”, 2);


(Andrey Kuzmin) #12

Все решилось проще,напряг разработку, они подсказали как игнорироваьт даннуют ошибку


(Nikolai) #13

Расскажите, пожалуйста, как, если не специфично для проекта? Вдруг такая проблема возникнет у кого-нибудь еще.


(Andrey Kuzmin) #14

Я не уверен что она вам поможет. У нас это была специфичная проверка, для старой версии продукта.