Попытка автоматизировать с Selenium параллельно, но несколько экземпляров webdriver запугивают

Итак, я пытаюсь создать Java-программу, которая использует Selenium для автоматизации WebDriver для выполнения задач на веб-сайте. На данный момент я использую его для работы, чтобы автоматизировать раздражающую задачу, когда пользователь должен загружать файлы в нашу базу данных. Я уже успешно сделал программу, которая автоматизирует это, и сохранила часы работы вручную.

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

Я тестировал это с гораздо более простой версией своей программы и успел ускорить простые задачи в 2-10 раз, открыв от десятков до сотен потоков с помощью своих собственных WebDrivers.

Проблема заключается в том, что всякий раз, когда я запускаю больше 1 WebDriver, вся эта вещь начинает случайным образом вызывать уродство, а в других случаях вообще не работает. Я пытался использовать "PhantomJSDriver" вместе с последним "PhantomJS.exe", но временами он работал, и в большинстве случаев он ничего не делал. Эта же программа, которая безупречно работает с одним драйвером, ломается, когда они запускаются параллельно.

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

Как я могу обойти автоматизацию просмотра веб-страниц параллельно с Selenium, если это возможно, а если нет, куда я должен искать, чтобы сделать это?

Ответы

Ответ 2

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

Я надеюсь, что эта ссылка покажет вам, как параллельно проводить тесты на одном компьютере.

В приведенной выше ссылке пользователь сказал создать пять разных программ для параллельной работы. Если вы хотите запустить отдельную программу параллельно, просто используйте TestNg or Junit для запуска нескольких экземпляров.

Это образец TestNg config code для параллельной проверки. Здесь я запустил два потока. Поэтому он будет вызывать метод TestNg @Test данного файла класса com.test.workflow.device.testcase20 в двух потоках.

  <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite1"  parallel="test" thread-count="2">
   <test name="Testcase20" >
    <classes>
        <class name="com.test.workflow.device.testcase20"/>
    </classes>
  </test>
 </suite>

Используя вышеописанный xml файл, вы можете получить parallelism в webdriver, используя сетку.

Ответ 3

Вы можете попробовать с помощью Sahi http://sahi.co.in/. Он может запускать несколько экземпляров браузеров параллельно.

Посмотрите, как Sahi действительно загружает файлы. http://sahi.co.in/w/_setFile

Ответ 4

Можно одновременно запускать экземпляры селена. Когда селен запускает экземпляры браузера, он по умолчанию открывает подключение по порту 7055.

Итак, если вы хотите запускать несколько экземпляров, вы должны запускать их на разных портах.

Ответ 5

Я бы предположил, что вы создаете драйвер для каждого браузера, и пусть ваш код знает, что вы используете больше нескольких драйверов. Другое предложение, как уже описано выше, с использованием Selenium Grid - лучшее решение: https://sqa.stackexchange.com/questions/5431/how-to-open-multiple-browsers-using-webdriver https://github.com/SeleniumHQ/selenium/wiki/Grid2

Ответ 6

если вы используете webdriver, попробуйте maven-surefire-plugin:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <forkCount>4</forkCount>
        </configuration>
    </plugin>
</plugins>

в опции использования кода "forkCount" значение 4 - количество процессоров. 4 процессора = 4 JVM. U может запускать webdriver для каждой JVM! link http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html