2015-05-01 3 views
8

Я хочу использовать Транспортир на Java, а не на Node.js. Можно ли использовать Protractor с Java или Python? Мы не хотим добавлять еще одну технологию для тестирования и хотим использовать существующие технологии.Используйте транспортир с Java

+4

Добро пожаловать на ТАК! Поскольку вы новичок в SO, вы можете прочитать следующие страницы справки: [«Как задать хороший вопрос?»] (Http://stackoverflow.com/help/how-to-ask) и ["How для создания минимального, полного и проверяемого примера "] (http://stackoverflow.com/help/mcve) – Jaap

+3

Я уже читал them.thanks :) – user3762901

ответ

8

К сожалению, у вас нет большого выбора в этом вопросе, так как Protractor - это платформа JavaScript для тестирования AngularJS, которая распространяется через Node.js.

Мы не хотим добавлять еще одну технологию для тестирования и хотим использовать существующие технологии.

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

Если ваше приложение не построено поверх Углового, вы можете использовать Selenium WebDriver поверх любых других языков, которые вы предпочитаете.

Selenium предоставляет пользователям документацию по использованию Python в качестве среды для написания тестов, подробнее об этом here.

3

Чтобы добавить что-то к ответу Тома выше, вы можете даже протестировать приложения или веб-сайты, не имеющие углов, с помощью Protractor. Но до сих пор нет способа, вы можете написать тесты Protractor с использованием Java или Python, поскольку ядро ​​Protractor построено на Javascript (node.js) и является чисто Javascript. Надеюсь, поможет.

1

Наилучший способ использования транспортира - иметь теги-утяжители, отдельно написанные на javascript, и вызывать те тесты из java/python, когда это требуется. То, что мы сейчас делаем!

+1

Не могли бы вы привести пример того, как это сделать? – alannichols

3

Протранслятор - это библиотека JS, поэтому вы не можете запускать ее на Java и тестировать угловые приложения без использования Protractor сложно, потому что ваш тестовый код должен дождаться завершения угловых процессов до того, как возникнут взаимодействия, такие как щелчок.

К счастью, Angular упростил определение, когда это будет сделано.

Существует функция JS, которая выполняет обратный вызов и будет уведомлять вас, как только Угол будет готов.

angular.getTestability("body").whenStable(callback); 

ПРИМЕЧАНИЕ: Это работает с угловым 1.4.8. Некоторые другие версии Angular имеют другой метод, похожий.

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

private void waitForAngular() { 

    final String script = "var callback = arguments[arguments.length - 1];\n" + 
      "var rootSelector = \'body\';\n" + 
      "var el = document.querySelector(rootSelector);\n" + 
      "\n" + 
      "try {\n" + 
      " if (angular) {\n" + 
      "  window.angular.getTestability(el).whenStable(callback);\n" + 
      " }\n" + 
      " else {\n" + 
      "  callback();\n" + 
      " }\n" + 
      "} catch (err) {\n" + 
      " callback(err.message);\n" + 
      "}"; 

    ((JavascriptExecutor) driver).executeAsyncScript(script, new Object[0]); 
} 

Позвонить waitForAngular() перед тем, как взаимодействовать с драйвером с помощью метода, такого как щелчок.

Возможно, вам понадобится другой rootSelector из 'body', и вы можете захотеть выбросить ошибку, если угловой не существует, но это хорошо работает для моих нужд.

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

5

В Java уже есть библиотека для автоматизации Угловых материалов.Его построил на основе транспортир называется «ngWebDriver»

+0

Отлично! Подписка на ngWebDriver в github. Любая идея, когда сторона Angular2 будет готова? – bobanahalf

+0

@bobanahalf Я не инициировал никаких переговоров с владельцем репо Полом Хаммантом относительно поддержки Angular2. Но похоже, что он уже начал (Guessing) – Manoj

2

По состоянию на 2017 год, я нашел эти библиотеки транспортир для Java:

  • jProtractor - Развитие несколько неактивны, но я испытал его на работу. Нажмите here для более подробной информации.
  • ngWebDriver - Разработано Полом Хаммантом (соавтором Селена). В настоящее время активно развивается с хорошей документацией.

Код сниппета:

<input type="text" ng-model="startBalance" placeholder="Enter your current balance" class="ng-pristine ng-valid">  

// jProtractor 
WebElement startBalanceField = driver.findElement(NgBy.model("startBalance")); 

// ngWebDriver 
WebElement startBalanceField = driver.findElement(ByAngular.model("startBalance"));