Страницы

Поиск по вопросам

Показаны сообщения с ярлыком selenium-webdriver. Показать все сообщения
Показаны сообщения с ярлыком selenium-webdriver. Показать все сообщения

воскресенье, 29 марта 2020 г.

Как отключить автопросмотр PDF и как скачать файл без подтверждения в Firefox?

#python #python_3x #selenium #selenium_webdriver #firefox


Браузер инициализируется следующим образом:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options as FirefoxOptions

options = FirefoxOptions()
            options = FirefoxOptions()
            profile = webdriver.FirefoxProfile()
            profile.set_preference("browser.download.folderList", 2)
            profile.set_preference("browser.download.manager.showWhenStarting", False)
            profile.set_preference("browser.download.manager.useWindow", True)
            profile.set_preference("browser.download.dir", "" + dwnld_path + "")
            profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf,application/msword,text/csv")

self.wd = webdriver.Firefox(firefox_profile=profile, options=options, capabilities={"marionette":
True}, executable_path="" + wd_path + "/geckodriver.exe",
                                            firefox_binary="C:/Program Files/Mozilla
Firefox 60/firefox.exe")


Но, тем не менее, при загрузке файла все равно появляется диалоговое окно, с которым
ничего не происходит.

Отсюда возник вопрос: а Firefox вообще может сохранять файлы, которые скачиваются
не по ссылке, а подсовываются через JS?
    


Ответы

Ответ 1



дело оказалось в настройке по умолчанию "Предпросмотр PDF", что решилось дополнительной преференсой: profile.set_preference("pdfjs.disabled", True)

суббота, 7 марта 2020 г.

Установить selenium webdriver chromedriver на linux, используя python

#python #linux #ubuntu #selenium #selenium_webdriver


Я на стадии настройки Selenium на Ubuntu. Хочу использовать python 3.5 и chrome browser.
Я установила pip3 и python 3.5. Скачала selenium и chromedriver через терминал и pip3.
Сейчас я ничего не могу запустить, потому что получаю ошибку при загрузке webdriver:



Полагаю, проблема в версии pip. Похоже, используется pip вместо pip3 - но как заставить
работать pip3?
    


Ответы

Ответ 1



Проблема была не в pip и не в версиях питона, а в том что на моей ubuntu стоял хром не последней версии. А хромдрайвер я естесственно скачала последний. Только после апдейта хрома все заработало.

Ответ 2



Думаю, что у Вас просто не установлен pip3. Для того, чтобы его установить, нужно сделать apt-get. Предварительно, право, обновите его: sudo apt-get update Далее можете ставить pip3: sudo apt-get install python3-pip Если же вдруг окажется, что pip3 поставлен, то в любом случае, попробуйте его переустановить: sudo apt-get remove python3-pip Что касается pip и pip3. Первый объект, как правило относится к python2.7. Второй -- к python3.5. Часто бывает так, что при установке версии 2.7 pip устанавливается сразу. С pip3 обычно больше косяков. Его нужно подтянуть apt-get, как я указал выше. Но нужно понимать, что по неведомым мне причинам при установке пакетов для 3 версии, проблем возникает гораздо больше, чем при работе со 2 версией. Что касается selenium и webDriver, то устанавливать Вам нужно именно selenium. По крайней мере, на 2 питоне вместе с ним в комплекте идёт и webdriver для большого кол-ва браузеров. Сделать это можно, очевидно, так: sudo pip3 install selenium После проделанных операций, по идее, всё будет более или менее ставиться из PyCharm, в котором Вы работаете.

среда, 26 февраля 2020 г.

Как поснимать checkbox

#html #python_3x #selenium #selenium_webdriver #xpath


Имеется Чек Бокс вот такого вида, как на него нажать, при помощи, Python + Selenium?    



    


Ответы

Ответ 1



Альтернативный, более лаконичный, и, кстати, быстрый способ нахождения этого элемента - это "by css selector": checkbox = browser.find_by_css_selector("input[testid=ns-chbox]") checkbox.click()

Ответ 2



checkbox1 = browser.find_element_by_xpath("//input[@testid='ns-chbox']") checkbox1.click()

пятница, 14 февраля 2020 г.

Как настроить Socks5 proxy на Selenium для chrome в python?

#python #python_3x #selenium #selenium_webdriver #socks5


никак не получается настроить socks5 прокси (и http кстати тоже) на Selenium. Перепробовал
кучу способ. И через опции

self.options.add_argument('--proxy-server=http://'+proxy)


и через 

webdriver.DesiredCapabilities.CHROME['proxy'] = {
        "socksProxy": proxy,
        "ftpProxy": proxy,
        "sslProxy": proxy,
        "noProxy": None,
        "proxyType": "MANUAL",
        "class": "org.openqa.selenium.Proxy",
        "autodetect": False
    }


И тд. Видимо где то я делаю ошибку, пожалуйста опишите полностью рабочий пример настройки
socks5 прокси на Selenium для Python и Chrome webdriver, с привидением форматов строки
прокси(ибо может я тут туплю...). Пишу от безысходности уже...Заранее большое спасибо!

PS два типа проблем возникали при попытках установить прокси разными способами: 


Просто оставался старый айпишник, не ставился прокси.
Пропадал доступ в интернет через webdriver. 
Просто почему то очень много способов в интернете находил, но результата пока что
не добился


Update:
Попробовал способом предложенным ниже. IP не удается изменить

proxy = 'name:pass@ip:port'
service_args = ['--proxy='+proxy, '--proxy-type=socks5']
driver = webdriver.Chrome(executable_path=path_to_chrome_webdriver, 
                          service_args=service_args)
driver.get('https://2ip.ru/')


Update:
Получилось использовать прокси socks5 без аутентификации с помощью следующего кода:

 options = webdriver.ChromeOptions()
 options.add_argument('--proxy-server=socks5://' + proxy)
 driver = webdriver.Chrome(options=self.options)


При добавлении

 options.add_argument('--proxy-auth=' + proxy_auth)


Пропадает подключение
    


Ответы

Ответ 1



Попробуйте через service_args: service_args = ['--proxy=127.0.0.1:9050', '--proxy-type=socks5', '--proxy-auth=admin:admin'] driver = webdriver.Chrome(executable_path=path_to_chrome_webdriver, service_args=service_args) Update: proxies = [ { 'addr': '123.123.123.123:1234', 'auth': 'admin:admin' }, { 'addr': '200.2.2.2:7868', 'auth': 'foo:bar' }, ] for proxy in proxies: service_args = ['--proxy=' + proxy['addr'], '--proxy-type=socks5', '--proxy-auth=' + proxy['auth']] driver = webdriver.Chrome(executable_path=path_to_chrome_webdriver, service_args=service_args) driver.get('https://2ip.ru/') driver.close()

Ответ 2



Хром не поддерживает прокси с аутентификацией по логину и паролю Я в этом не уверен, но очень много информации изучив я пришел к этому. Единственное решение, которое для меня подходит - это использовать прокси без аутентификации по логину и паролю (можно использовать аутентификацию по IP) options = webdriver.ChromeOptions() proxy = '12.12.421.125:1949' options.add_argument('--proxy-server=socks5://' + proxy) driver = webdriver.Chrome(options=self.options)

среда, 5 февраля 2020 г.

Пропуск элемента и переход к следующему элементу в цикле For

#java #selenium_webdriver


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

Есть список List с динамическими элементами которые меняют свою ширину
каждые два дня. Их количество так же меняется, поэтому прогнал через цикл for, чтобы
кликнуть на все по-очереди.

Все работало до тех пор, пока два элемента не приняли ширину значения 0. Selenium
Webdriver выдал ошибку:


  Element is not clickable at point…


Теперь мне нужно сделать так, чтобы при встрече с таким элементом, Selenium пропускал
этот элемент (на который он не может кликнуть) в цикле и переходил к следующему элементу,
на который можно кликнуть (в данном случае это следущий элемент имеющий ширину больше 0).

Ниже привел код Java, с которым я пыталася работать, но пропустить некликаемый элемент
и перейти к другому элементу не получается. Помогите советом.

Спасибо! 

for (i = 0; i < elements.size(); i ++) {
    elements.get(i).getSize().getWidth();
    if (elements.get(i).getSize().getWidth() == 0) {
        elements.get(i.next()).click();
    }
    elements.get(i).click();
}

    


Ответы

Ответ 1



Попробуйте так for (i = 0; i < elements.size(); i++) { if (elements.get(i).getSize().getWidth() <= 0) { continue; } elements.get(i).click(); } Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла UPD в условии указано "<= 0" т.к. поля с отрицательной шириной тоже не кликабельные

Ответ 2



Пробежаться по всем элементам, отфильтровав с учётом нулевой длины, можно так: elements.stream() .filter(e -> e.getSize().getWidth() > 0) .forEach(WebElement::click);

воскресенье, 12 января 2020 г.

Запуск тестов в разных браузерах одновременно

#selenium #junit #selenium_webdriver


Как запустить один и тот же тест в нескольких браузерах одновременно? 

Пытался использовать Selenium grid, но не хватило знаний и навыков гугления. 

Запускаю на своей машине Windows 8.1
Использую JUnit Webdriver 2.0 maven
    


Ответы

Ответ 1



Параллельный запуск тестов является одним из мощных средств для ускорения тестирования. Хорошо автоматизированные тесты должны быть независимыми, изолированными и воспроизводимыми, эти качества делают их идеальными для одновременного выполнения. Однако на практике не все тестовые классы разработаны с возможностью параллельного запуска. Такие аспекты, как общие изменяемые переменные, общий доступ к файлу и базе данных, или использование встроенного веб-сервера, могут сделать параллельный запуск тестов очень сложным или вообще невозможным. Тем не менее, одновременный запуск тестов, определенно, очень полезная вещь. Начиная с версии 4.7 в JUnit была добавлена возможность параллельного запуска, для этого нужно настроить Maven следующим образом: [...] org.apache.maven.plugins maven-surefire-plugin 2.12.3 methods [...] Атрибут parallel может принимать значения «classes», «methods» или «both». При этом нельзя однозначно утверждать о количестве запущенных одновременно тестов, это напрямую зависит от параметров компьютера и настроек плагина по-умолчанию. Во время запуска теста найдите следующую строку в консоли, она позволяет узнать параметры с которыми выполняется параллельный запуск: ------------------------------------------------------- T E S T S ------------------------------------------------------- Concurrency config is parallel='methods', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false Атрибут threadCount позволяет указать, сколько потоков должно быть выделено для запуска тестов (сколько тестов должно запускаться параллельно). Обратите внимание, что его использование с параметром perCoreThreadCount, установленным в true, может исказить реальное количество запускаемых одновременно тестов. В то же время perCoreThreadCount позволяет добиться большей гибкости при запуске тестов на разных машинах. Например, при запуске тестов со следующей конфигурацией на машине с 2-х ядерным процессором, одновременно будут выполняться 4 тестовых класса, а не 2: [...] org.apache.maven.plugins maven-surefire-plugin 2.12.3 classes true 2 [...] Существует еще такой атрибут как useUnlimitedThreads. При его использовании будет создаваться столько потоков, сколько классов или методов в Вашем проекте, и все тесты будут пытаться запуститься одновременно. useUnlimitedThreads отлично работает для юнит-тестов, но для функционального web тестирования его лучше не использовать. Настройки конфигурации полностью зависят от характера Ваших тестов, поэтому стоит поэкспериментировать с различными конфигурациями и посмотреть, какой из вариантов настройки больше всего подходит для Вас. Информация взята с Блога вебразработчика В будущем советую все таки использовать Google. И не бояться эксперементировать со своим проектом. Надеюсь предоставленная информация Вам поможет, удачи в дальнейших трудах)

пятница, 10 января 2020 г.

Как закрыть консоль после выполнения приложения?

#c_sharp #console #selenium #selenium_webdriver


Приложение Selenium, после выполнения консоль остается на экране. Выкинул все из
кода, оставил только инициализацию и закрытие драйвера - все по-прежнему. Что делать?

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;

namespace Myspace
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver = new ChromeDriver();

            driver.Close();

        }
}

    


Ответы

Ответ 1



Попробуйте так: using OpenQA.Selenium; using OpenQA.Selenium.Chrome; namespace ConsoleApp4 { public class Program { private static void Main() { IWebDriver driver = new ChromeDriver(); driver.Quit(); } } } Похоже что это баг, на их баг-трекере баг заведен. WebDriver.close() does not close browser window UPD: Кстати если использовать оператор using то всё закрывается корректно: private static void Main() { using (IWebDriver driver = new ChromeDriver()) { } //driver.Quit(); } Потому что метод Dispose как раз использует операцию Quit: protected virtual void Dispose(bool disposing) { try { this.Execute(DriverCommand.Quit, null); } /*...*/ }

четверг, 9 января 2020 г.

Java Selenium запись видео

#java #selenium #selenium_webdriver


На сайте есть анимационный блок, анимация которого производится с применением html5,
css, и js. Можно ли как то записать эту анимацию в gif? Использую selenium и метод
getScreenshotAs. 

Изначально задумка была такая: наделать кучу скриншотов, а потом слепить их в gif
файл, но проблема в том, что через метод getScreenshotAs скриншот делается очень долго(350-400мс),
поэтому нет никакой плавности(получается 3-4 кадра в секунду, а то и меньше). 

Вопрос в следующем, можно ли решить как то эту проблему, если нельзя, то может есть
какой то другой способ? Варианты с записью экрана не подойдут, потому что это все будет
делаться на сервере, без gui.
    


Ответы

Ответ 1



Можно отрисовывать Selenium на виртуальный фреймбуфер Xvfb и записывать видео, например, через ffmpeg. Запускаете сервер Xvfb, а в нём браузер: xvfb-run --listen-tcp --server-num=123 --auth-file /tmp/xvfb.auth -e /dev/stdout -s "-ac -screen 0 1024x768x24" firefox ru.stackoverflow.com 123 - номер дисплея xserver на ваш выбор /tmp/xvfb.auth - путь, по которому будет сохранены авторизационные данные 1024x768x24 - желаемая геометрия фреймбуфера firefox ru.stackoverflow.com - открывает этот сайт в Firefox; замените на вашу строку запуска Selenium Чтобы начать писать видео: ffmpeg -f x11grab -i :123 -video_size 1024x768 -codec:v libx264 -r 12 video.mp4 -f x11grab -i :123 - источник видеопотока: xserver, 123й дисплей -video_size 1024x768 - разрешение видеофайла libx264 - желаемый видеокодек -r 12 - частота кадров Для gif-файла кодек указыать не нужно: ffmpeg -f x11grab -video_size 1024x768 -i :123 -r 12 1.gif Чтобы снять скриншот (требуется установленный ImageMagick): xwd -display :123 -root | convert xwd:/dev/stdin png:1.png -display :123 - все тот же 123й дисплей -root - не имеет отношения к пользователю root; указывает, что нужен скриншот всего рабочего стола, а не конкретного окна

понедельник, 6 января 2020 г.

Opera VPN Selenium Web driver

#c_sharp #selenium_webdriver #vpn #test_automation #chromium


Как при запуске operadriver по умолчанию включать opera vpn? 

Может можно как-то это автоматизировать ?
    


Ответы

Ответ 1



Можно создавать разные профили и на каждом профиле подключать vpn от определенной страны. Запускаем оперу с cmdline параметрами "--user-data-dir=C:\_opera_data_" + vpnCountries. Каждый запуск отдельного --user-data-dir создает новые сохранения настроек. Нужно вручную заходить в каждый --user-data-dir+vpnCountries (то есть запускать оперу с таким параметром) и устанавливать vpn через определенную страну. После выхода из браузера настройки включенного vpn остаются в --user-data-dir+vpnCountries. И при следующем запуске оперы с параметром --user-data-dir+vpnCountries включается тот впн, который был использован до прошлого закрытия. P.S. Способ конечно Угг. Но ничего рабочего и другого мне никто не предложил, пришлось придумать такое "ухищрение".. public static IWebDriver StartWebDriver() { IWebDriver webDriver; OperaOptions oo = new OperaOptions(); string vpnCountries = GetRandomString("vpn-countries.txt"); //MessageBox.Show(vpnCountries); oo.AddArgument(@"--user-data-dir=C:\_opera_data_" + vpnCountries); oo.AddArgument("--private"); oo.BinaryLocation = @"C:\Program Files\Opera\launcher.exe"; webDriver = new OperaDriver(oo); return webDriver; }

суббота, 4 января 2020 г.

Как вставить текст в скрытый textarea с помощью selenium webdriver

#c_sharp #vbnet #selenium_webdriver


День добрый.
Каким образом можно вставить текст в скрытый элемент Textarea с помощью Selenium
Webdriver
    


Ответы

Ответ 1



Dim txtScript = String.Format("arguments[0].innerText = '{0}';", "texttexttext") DirectCast(driver, IJavaScriptExecutor).ExecuteScript(txtScript, element)

Ответ 2



Что то типа этого (под жабу так) WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("document.getElementById('inputId').value = 'My value';"); Или с помощью JS сделать элемент видимым и уже просто его в браузере обработать.

воскресенье, 1 декабря 2019 г.

Как в google chrome программно выбрать микрофон?

#javascript #google_chrome #selenium_webdriver #chrome_extension #google_chrome_devtools




Можно ли как-то программно выбрать мирофон в хроме? При условии того что есть полный
доступ к машине на которой запускается браузер.

Может это можно как-то сделать на JavaScipt? Если это можно реализовать на JS, то
потом можно сделать расширение, через tampermonkey или запустить скрипт через webdriver
Selenium.

Нашел следующий пример, который выводит в консоль список аудиоустройств. Можно ли
также через консоль сменить микрофон? Пожалуйста дайте пример, если это возможно. Если
это не возможно, то пожалуйста напишите почему не получится и как можно по другому
попытаться решить задачу.


navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
  devices.forEach(function(device) {
    console.log(device.kind + ": " + device.label +
            " id = " + device.deviceId);
  });
})



    


Ответы

Ответ 1



Можно выбрать девайс с помощью метода setSinkId(deviceId) как указано в https://developers.google.com/web/updates/2015/10/media-devices element.setSinkId(sinkId) .then(function() { console.log('Audio output device attached: ' + sinkId); }) .catch(function(error) { // ... });

Ответ 2



Нет, но можно сделать кастомный конфиг для хрома, где разрешен микрофон и в exceptions добавлено: "media_stream_mic":{"http://localhost:1337,*": {"last_used":1470931206, "setting":1} }, и селениуму передавать эти настройки.

вторник, 16 июля 2019 г.

Использовать прокси с авторизацией, через Selenium на java

Задача: запустить браузер с подключение через прокси для подключения к которому необходимо проходить аутентификацию.

Для установки прокси в браузере вручную, прописываю адрес и порт в настройках соединения браузера. После этого, при первом доступе к любому серверу в браузере вылезает диалоговое окно для прохождения авторизации (basic authorization). После ее прохождения все запросы проходят через прокси.
В селениуме пробовал делать так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy(":@

:"); proxy.setSslProxy(":@
:"); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
В этом случае в конфигурации подключения браузера на место адреса прокси устанавливается , а порт дэфолтный ( ноль ). Если дописать http://, то вместо адреса вставляется http, а порт ноль.

И еще, пробовал так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy("
:"); proxy.setSslProxy("
:"); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
В этом случае адрес и порт прописываются правильно и после запуска браузера (на строке WebDriver driver = new FirefoxDriver(capabilities);) появляется диалоговое окно с текстом Прокси «moz-proxy://
:» запрашивает имя пользователя и пароль. Сайт сообщает: «proxy» и полями для ввода логина и пароля, выполнение программы приостанавливается, что не дает возможность воспользоваться созданным объектом driver для переключения на окно и ввести логин и пароль (driver.switchTo().alert()....).

Также нагуглил вариант:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy("
:"); proxy.setSslProxy("
:"); proxy.setSocksUsername(""); proxy.setSocksPassword(""); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
Но результат такой-же как и во втором случае.

Работать должно как минимум в Firefox, а в идеале еще и в PhantomJS. В принципе, не будет лишней поддержка Chrome, но это не обязательно.

Update
Неужели никто не сталкивался с таким?
Я пробовал использовать еще такой вариант:
DesiredCapabilities capabilities = new DesiredCapabilities(); // DesiredCapabilities.firefox(); FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.proxy.type", 1); profile.setPreference("signon.autologin.proxy" , true); profile.setPreference("network.websocket.enabled", false); profile.setPreference("network.proxy.share_proxy_settings", false); profile.setPreference("network.automatic-ntlm-auth.allow-proxies", false); profile.setPreference("network.http.phishy-userpass-length", 255); profile.setPreference("network.auth.use-sspi", false); profile.setPreference("network.proxy.http", "
"); profile.setPreference("network.proxy.http_port", ); profile.setPreference("network.proxy.ssl", "
"); profile.setPreference("network.proxy.ssl_port", ); capabilities.setCapability(FirefoxDriver.PROFILE, profile); org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setProxyType(ProxyType.MANUAL); proxy.setSocksUsername(""); proxy.setSocksPassword(""); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities); driver.get("http://2ip.ru");
Если устанавливать конфигурацию прокси через профайл фаерфокса ( profile.setPreference(...) ), то окно для авторизации через прокси появляется немного раньше окна браузера (браузер запускается примерно за 1 секунду, а окно для авторизации появляется примерно на пол секунды раньше) и при этом, в отличии от вариантов реализации из предыдущего сообщения, не блокирует главное окно (которое запускается/отображается немножко позже). Также в этом варианте выполнение программы не приостанавливается на строке создания драйвера (new FirefoxDriver(capabilities);). Программа приостанавливается на строке driver.get("http://2ip.ru"); , браузер при этом ожидает ответ от 2ip.ru, до тех пор пока я не введу вручную данные для авторизации прокси, если авторизация не удалась, то вместо запрошенной страницы получаю сообщение - "Прокси-сервер отказывается принимать соединения".
Вопрос: как можно получить доступ к окну авторизации для дальнейшего ввода логина и пародя или как пройти авторизацию на прокси сервере не выводя окно для авторизации ( примерно как я пробовал: proxy.setSocksUsername(""); proxy.setSocksPassword("" ); )?


Ответ

Решил через AutoItX4Java:
private void mozProxyAuth(String login, String password) { String JACOB_DLL_TO_USE = System.getProperty("sun.arch.data.model").contains("32") ? "jacob-1.18-x86.dll" : "jacob-1.18-x64.dll"; File file = new File(System.getProperty("user.dir"), JACOB_DLL_TO_USE); System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath()); AutoItX x = new AutoItX(); if (x.winWait("Требуется аутентификация", null, 10)) { x.winActivate("Требуется аутентификация"); x.send(login + "{TAB}" + password + "{ENTER}", false); } }

четверг, 7 марта 2019 г.

Запуск тестов в разных браузерах одновременно

Как запустить один и тот же тест в нескольких браузерах одновременно?
Пытался использовать Selenium grid, но не хватило знаний и навыков гугления.
Запускаю на своей машине Windows 8.1 Использую JUnit Webdriver 2.0 maven


Ответ

Параллельный запуск тестов является одним из мощных средств для ускорения тестирования. Хорошо автоматизированные тесты должны быть независимыми, изолированными и воспроизводимыми, эти качества делают их идеальными для одновременного выполнения. Однако на практике не все тестовые классы разработаны с возможностью параллельного запуска. Такие аспекты, как общие изменяемые переменные, общий доступ к файлу и базе данных, или использование встроенного веб-сервера, могут сделать параллельный запуск тестов очень сложным или вообще невозможным. Тем не менее, одновременный запуск тестов, определенно, очень полезная вещь.
Начиная с версии 4.7 в JUnit была добавлена возможность параллельного запуска, для этого нужно настроить Maven следующим образом:
[...] org.apache.maven.plugins maven-surefire-plugin 2.12.3 methods [...]
Атрибут parallel может принимать значения «classes», «methods» или «both». При этом нельзя однозначно утверждать о количестве запущенных одновременно тестов, это напрямую зависит от параметров компьютера и настроек плагина по-умолчанию.
Во время запуска теста найдите следующую строку в консоли, она позволяет узнать параметры с которыми выполняется параллельный запуск:
------------------------------------------------------- T E S T S ------------------------------------------------------- Concurrency config is parallel='methods', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false
Атрибут threadCount позволяет указать, сколько потоков должно быть выделено для запуска тестов (сколько тестов должно запускаться параллельно). Обратите внимание, что его использование с параметром perCoreThreadCount, установленным в true, может исказить реальное количество запускаемых одновременно тестов. В то же время perCoreThreadCount позволяет добиться большей гибкости при запуске тестов на разных машинах. Например, при запуске тестов со следующей конфигурацией на машине с 2-х ядерным процессором, одновременно будут выполняться 4 тестовых класса, а не 2:
[...] org.apache.maven.plugins maven-surefire-plugin 2.12.3 classes true 2 [...]
Существует еще такой атрибут как useUnlimitedThreads. При его использовании будет создаваться столько потоков, сколько классов или методов в Вашем проекте, и все тесты будут пытаться запуститься одновременно. useUnlimitedThreads отлично работает для юнит-тестов, но для функционального web тестирования его лучше не использовать.
Настройки конфигурации полностью зависят от характера Ваших тестов, поэтому стоит поэкспериментировать с различными конфигурациями и посмотреть, какой из вариантов настройки больше всего подходит для Вас.
Информация взята с Блога вебразработчика
В будущем советую все таки использовать Google. И не бояться эксперементировать со своим проектом. Надеюсь предоставленная информация Вам поможет, удачи в дальнейших трудах)

понедельник, 4 марта 2019 г.

Opera VPN Selenium Web driver

Как при запуске operadriver по умолчанию включать opera vpn?
Может можно как-то это автоматизировать ?


Ответ

Можно создавать разные профили и на каждом профиле подключать vpn от определенной страны.
Запускаем оперу с cmdline параметрами "--user-data-dir=C:\_opera_data_" + vpnCountries. Каждый запуск отдельного --user-data-dir создает новые сохранения настроек. Нужно вручную заходить в каждый --user-data-dir+vpnCountries (то есть запускать оперу с таким параметром) и устанавливать vpn через определенную страну. После выхода из браузера настройки включенного vpn остаются в --user-data-dir+vpnCountries. И при следующем запуске оперы с параметром --user-data-dir+vpnCountries включается тот впн, который был использован до прошлого закрытия.
P.S. Способ конечно Угг. Но ничего рабочего и другого мне никто не предложил, пришлось придумать такое "ухищрение"..
public static IWebDriver StartWebDriver() { IWebDriver webDriver;
OperaOptions oo = new OperaOptions();
string vpnCountries = GetRandomString("vpn-countries.txt");
//MessageBox.Show(vpnCountries);
oo.AddArgument(@"--user-data-dir=C:\_opera_data_" + vpnCountries);
oo.AddArgument("--private");

oo.BinaryLocation = @"C:\Program Files\Opera\launcher.exe";
webDriver = new OperaDriver(oo);
return webDriver; }

четверг, 31 января 2019 г.

Как вставить текст в скрытый textarea с помощью selenium webdriver

День добрый. Каким образом можно вставить текст в скрытый элемент Textarea с помощью Selenium Webdriver


Ответ

Dim txtScript = String.Format("arguments[0].innerText = '{0}';", "texttexttext") DirectCast(driver, IJavaScriptExecutor).ExecuteScript(txtScript, element)

суббота, 6 октября 2018 г.

Как в google chrome программно выбрать микрофон?


Можно ли как-то программно выбрать мирофон в хроме? При условии того что есть полный доступ к машине на которой запускается браузер.
Может это можно как-то сделать на JavaScipt? Если это можно реализовать на JS, то потом можно сделать расширение, через tampermonkey или запустить скрипт через webdriver Selenium
Нашел следующий пример, который выводит в консоль список аудиоустройств. Можно ли также через консоль сменить микрофон? Пожалуйста дайте пример, если это возможно. Если это не возможно, то пожалуйста напишите почему не получится и как можно по другому попытаться решить задачу. navigator.mediaDevices.enumerateDevices() .then(function(devices) { devices.forEach(function(device) { console.log(device.kind + ": " + device.label + " id = " + device.deviceId); }); })


Ответ

Можно выбрать девайс с помощью метода setSinkId(deviceId) как указано в https://developers.google.com/web/updates/2015/10/media-devices
element.setSinkId(sinkId) .then(function() { console.log('Audio output device attached: ' + sinkId); }) .catch(function(error) { // ... });