Полезные ссылки
- Selenium Doc
- WebDriver API документация
- Книга по Selenium (читать на русском)
- Настройки зон безопасности selenium для браузера IE
- [Как Clojure помогает ускорить написание Selenium-тестов](https://habrahabr.ru/post/308228)
- Testing Downloading Files in IE9 via Selenium
- Selenium/Solenoid
- Use Xvfb to launch Headless Browser Firefox on Ubuntu Server without Desktop GUI - видео
- Браузер Chrome научился работать на устройствах без экрана
- Linux: запуск графических приложений в фоне
- PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.
- https://testerslittlehelper.wordpress.com/
- Connecting Selenium to Headless Firefox
- Навигация- здесь есть переключение между фреймами
- Как работать c ожиданиями от WebDriver API
- Alert present WebDriver (stackoverflow)
- 100+ вопросов по Selenium
- Самый простой способ скрыть браузер - установить PhantomJS. Затем измените эту строку: driver = webdriver.Firefox() в driver = webdriver.PhantomJS() Остальную часть кода не нужно менять, и браузер не откроется. Для целей отладки используйте driver.save_screenshot('screen.png') на разных этапах вашего кода или просто переключитесь на веб-браузер Firefox снова. В Windows вам нужно указать путь к phantomjs.exe: driver = webdriver.PhantomJS('C:\phantomjs-1.9.7-windows\phantomjs.exe')link_without_label
- Selenium WebDriver: basic авторизация
- BrowserMob Proxy - A free utility to help web developers watch and manipulate network traffic from their AJAX applications.на github
- browsermob-proxy-py - Python client for the BrowserMob Proxy 2.0 REST API. смотрите DOCS
Запуск chrome без графического окна
from selenium import webdriver
options = webdriver.ChromeOptions()
# tell selenium to use the dev channel version of chrome
# NOTE: only do this if you have a good reason to
options.binary_location = '/usr/bin/google-chrome-unstable'
options.add_argument('headless')
# set the window size
options.add_argument('window-size=1200x600')
# initialize the driver
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://facebook.com')
# wait up to 10 seconds for the elements to become available
driver.implicitly_wait(10)
# wait up to 10 seconds for the elements to become available
driver.implicitly_wait(10)
Настройка прокси сервера в браузерах
-
https://stackoverflow.com/questions/11450158/how-do-i-set-proxy-for-chrome-in-python-webdriver
- Firefox
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "10.10.10.10")
profile.set_preference("network.proxy.http_port", 8080)
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile)
- Chrome
from selenium import webdriver
PROXY = "23.23.23.23:3128" # IP:PORT or HOST:PORT
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://%s' % PROXY)
chrome = webdriver.Chrome(chrome_options=chrome_options)
Переключение между окнами и фреймами
источник: https://habrahabr.ru/post/250947/
WebDriver поддерживает переключение между именованными окнами с помощью метода “switch_to_window”:
driver.switch_to_window("windowName")
Вы можете использовать цикл для перебора всех открытых окон, к примеру, так:
for handle in driver.window_handles:
driver.switch_to_window(handle)
Еще вы можете переходить между фрэймами (frame или iframes):
driver.switch_to_frame("frameName")
Можно получить доступ к подчиненным фреймам, подавая путь, разделяемый точкой, или можно получить фрейм по индексу:
driver.switch_to_frame("frameName.0.child")
Следующий код перенаправит к фрейму с именем “child”, который в свою очередь принадлежит первому подчиненному фрейму фрейма “frameName”. Пути к фреймам описываются полностью — от верхнего уровня:
driver.switch_to_frame("frameName.0.child")
Когда работа с фреймами будет завершена, необходимо переключиться обратно, к главному фрейму, что может быть сделано следующим образом:
driver.switch_to_default_content()
Всплывающие окнаSelenium WebDriver из упаковки поддерживает управление всплывающими диалоговыми окнами. После того как вы инициируете запуск, откроется окно, управлять им можно так:
alert = driver.switch_to_alert()
Код вернет объект текущего открытого окна. С этим объектом вы можете принять, отклонить вопрос окна, прочитать его содержимое или даже ввести текст по приглашению окна. Интерфейс взаимодействия со всплывающими окнами работает одинаково хорошо как для предупреждений (alerts), так и для запросов к подтверждению (confirms) и приглашений к вводу (prompts). За дополнительной информацией обратитесь к документации API.```
источник: https://stackoverflow.com/questions/48245424/how-to-use-screenshot-in-headless-firefox-in-selenium-with-python
The Release Notes of Selenium v3.6.0 clearly mentions Add options to start Firefox and Chrome in headless modes. So we need to use the Options
Class as follows to invoke the headless
argument:
from selenium import webdriver
from selenium.webdriver.firefox.options
import Options
options = Options()
options.add_argument("--headless")
driver = webdriver.Firefox(firefox_options=options, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")
print("Firefox Headless Browser Invoked")
driver.get('http://google.com/')
driver.quit()
Следующий фрагмент кода Java WebDriver должен работать для запуска IE. Код будет игнорировать настройку параметров защищенного режима для всех зон в браузере IE.
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
File file = new File("D:\\Ripon Al Wasim\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver(capabilities);
driver.get("https://www.google.com/");
Загрузите IEDriverServer и извлеките его в нужное место и установите абсолютный путь (в моем примере выше это было "D:\Ripon Al Wasim\IEDriverServer.exe" )
Всяко-разное (отсортировать)
Вот еще одно решение, использующее remotewebdriver, оно работает как магия, и мне это нравится. Вот класс, который у меня есть:
driver.findElementByLinkText("Upload Files").click();
driver.setLogLevel(Level.ALL);
System.out.println(driver.getCurrentUrl());
WebElement element = driver.findElement(By.xpath("//input[@name='file_1']"));
LocalFileDetector detector = new LocalFileDetector();
//Now, give the file path and see the magic :)
String path = "D://test66T.txt";
File f = detector.getLocalFile(path);
((RemoteWebElement)element).setFileDetector(detector);
element.sendKeys(f.getAbsolutePath());
//now click the button to finish
driver.findElementByXPath("//html/body/div[9]/div[1]/a/span").click();
- Проблема — необходимо загрузить файл на сервер, используя стандартные элементы HTML:
<input name=«uploadFile»type=«file»>
<input name=«doUpload»value=«Upload»type=«button»/>
Решение — я рекомендую просто взять и вынести себе это в отдельный универсальный метод и использовать его каждый раз когда нужно что-либо загрузить через такую форму.
Исключение — Safari Driver полностью не поддерживает загрузку файла, т.к. насколько я понял, он javascript-based. Появляющееся окно с выбором файла ставит его в тупиковое положение. Такие сценарии нужно либо избегать, либо добиваться результата другим способом — создавать собственный HTTP запрос или подкладывать данные напрямую на стороне сервера, если такая возможность имеется.
Пример кода:
protected void uploadFile(By uploadInput, By uploadButton, String filePath) {
clearInput(uploadInput);
findElement(uploadInput).sendKeys(filePath);
findElement(uploadButton).click();