Подключите Selenium WebDriver к SWT-браузеру, встроенному в JPanel - PullRequest
3 голосов
/ 01 мая 2019

Я устанавливаю среду автоматизации, используемую для автоматизации определенных потоков в приложении JavaFx.Существует новый вариант использования, когда нам нужно отображать стороннюю веб-страницу в нашем приложении с помощью SWT Browser API.

enter image description here

С тех пор, как мойПриложение использует JavaFX, а не SWT, мне пришлось встроить браузер SWT, используя подход, упомянутый здесь .Нам пришлось использовать браузер SWT, потому что API, предоставляемый сторонним приложением, использует приемники событий SWT для связи с моим приложением.

Теперь, когда браузер встроен, нам нужно протестировать определенные сценарии обмена данными с помощью автоматических тестов.Я попытался автоматизировать потоки с помощью метода SWTBrowser.execute (String script) , написав несколько методов-оболочек.Пример кода:

    public void setTextById(String id, String text) throws InterruptedException
    {
        Browser browser = getSwtBrowser();
        CountDownLatch latch = new CountDownLatch(1);
        browser.getDisplay().syncExec(new Runnable()
        {
            @Override public void run()
            {
                boolean result = browser
                        .execute("document.getElementById('" + id + "').setAttribute('value', '" + text + "');");
                latch.countDown();
            }
        });
        latch.await();
    }

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

Браузер SWT использует собственный браузерОС, на которой она развернута для рендеринга веб-страниц, как предложено здесь Он использует:

  • IE 11 в Windows
  • Safari 11 в Ubuntu

Вопрос: Как мы можем получить Selenium дляподключиться к WebDrivers встроенных браузеров ОС SWTBrowser для доступа к DOM в существующей сессии браузера ?

РЕДАКТИРОВАТЬ: Сделал немного больше отладки и отметил следующие моменты:

Selenium состоит из двух частей для автоматизации тестирования. клиент и сервер .Клиент отправляет операции автоматизации в виде HTTP-запроса POST на сервер.Сервер отвечает за порождение нужного браузера и выполнение реального взаимодействия.

Я просматривал код сервера и обнаружил, что сервер запускает собственный браузер, используя IELaunchURL () / CreateProcess () API.Также есть метод attachToBrowser (...) .

Я хотел бы использовать метод attachToBrowser (...) отправка информации о процессе из Internet Explorer, встроенной в SWTBrowser.В этом подходе есть и другая сложность.Похоже, что SWTBrowser не порождает процесс IE напрямую.Он взаимодействует с dll интернет-обозревателя.resources used by the SWT browser application Можно ли в любом случае извлечь информацию о процессе встроенного процесса IE в этом случае?Или есть какой-то другой подход, который я могу использовать, чтобы решить эту проблему?

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Надеюсь, что есть возможность использовать Selenium для управления встроенными браузерами.

Это невозможно сделать с Selenium, см. Здесь аналогичную проблему .

В качестве решения вы можете использовать инструмент визуальной автоматизации:

Оба инструмента являются кроссплатформенными (Win, Mac, Linux).

1 голос
/ 07 мая 2019

Вам потребуется запустить новый IE WebDriver, а затем подключить его к существующему браузеру. Я немного копаюсь, и все, что я могу придумать, это старая ветка: Может ли Selenium взаимодействовать с существующим сеансом браузера?

Этот подход использует RemoteWebDriver, поэтому вам потребуется отдельная версия Selenium. Для меня - это кажется излишним, вероятно, склонным к ошибкам. Я бы предложил интегрировать какое-то программное обеспечение распознавание изображений , которое будет взаимодействовать со встроенным браузером. Я знаю, что Sikuli делает что-то подобное, и у него есть Java API. Вы можете получить его здесь: Sikuli

...