TL; DR : у меня есть требование для распределения бизнес-логики во время выполнения между сервером и несколькими удаленными клиентами, использующими Selenium WebDriver.
Я рассмотрел сериализацию объектов, RMI, загрузку JAR-файлов на лету, Selenese через Java и Selenium Grid.
Сведения : Ожидается, что несколько удаленных клиентов будут опрашивать очередь через JMS через Интернет, чтобы получить ордер на выполнение определенной работы на данном веб-сайте. Каждый клиент будет запускать Selenium WebDriver, проходить через этот веб-сайт способом, который не является предопределенным (или только в очень абстрактных терминах) до времени выполнения клиента , затем возвращаться к опросу очереди до повторного вызова.
Сложность заключается в том, что ни веб-сайт, ни точные шаги обхода не будут заранее известны клиенту. Я могу заранее определить абстрактные шаги / методы на сервере , но клиент будет зависеть от каких-то загруженных данных для точного получения списка команд Selenium. На этих шагах также необходимо выполнить цикл (repeat until...
).
Например, если мы определим void login()
для example1.com:
- Щелкните поле 'username'
- Отправить ключи 'username'
- Щелкните поле «Пароль»
- Отправить ключи «пароль»
- Нажмите «отправить»
Принимая во внимание, например, example2.com void login()
будет:
- Нажмите на кнопку «Войти»
- Дождаться появления поля 'username'
- Щелкните поле 'username'
- Нажмите «Продолжить»
- и т.д.
исследуемый
- Сериализация : будут передавать только переменные объекта, но не логику объекта.
- RMI : Логика объекта выполняется на сервере, а не на клиенте, поэтому она не может взаимодействовать с экземпляром Selenium клиента.
- Загрузка файлов JAR на лету : возможные решения здесь и менее оптимистично здесь . Это реалистично?
- Selenese : Вероятно, не может быть запущен непосредственно под Java. Может быть возможно с selenese-runner-java , но это, похоже, только для командной строки, что ограничивает взаимодействие с клиентским программным обеспечением и, следовательно, функциональность
- Selenium Grid : узел (клиент) должен быть постоянно подключен к концентратору (серверу), что не может быть гарантировано
Как я могу таким образом распространять бизнес-логику от сервера к клиенту во время выполнения?