2016-01-21 2 views
1

Мы пытались выяснить, как позвонить (0) из строящего сценария, (1) войти в систему сайта selenium, а затем (2) вызвать часть навигации (скрипта), сидящую в другом тестовом случае. Запуск обоих самостоятельно работает на 100%. Ниже приведен код, который я использую для вызова обоих сценариев из (0), но после того, как это сделано с login.run, новый браузер открыт с select.run и очевидно, что тест не пройден, потому что это не вошли в систему.Передача экземпляра webdriver между groovy скриптами?

login = testRunner.testCase.testSuite.project.testSuites["Selenium"].testCases["Login"].testSteps["Login_Plat"] 
select = testRunner.testCase.testSuite.project.testSuites["Selenium"].testCases["Calculator"].testSteps["GS_Platinum"] 

login.run(testRunner, context) 
select.run(testRunner, context) 

Так Я пошел и манипулировал loginselect, (путем удаления кода WebDriver) и основной код сценария теперь выглядит следующим образом (я уже исключил импорт в этой пасте):

System.setProperty("webdriver.chrome.driver",testRunner.testCase.testSuite.getPropertyValue("driverPath")) 
env = testRunner.testCase.testSuite.getPropertyValue("testEnvDetails1") 
WebDriver driver = new ChromeDriver() 

driver.get(env) 

login = testRunner.testCase.testSuite.project.testSuites["Selenium"].testCases["Login"].testSteps["Login_Plat"] 
select = testRunner.testCase.testSuite.project.testSuites["Selenium"].testCases["Calculator"].testSteps["GS_Platinum"] 
login.run(testRunner, context) 
select.run(testRunner, context) 

Я нахожу это в журнале ошибок неудачный сценарий входа в систему (при запуске скрипта 0) ERROR:groovy.lang.MissingPropertyException: No such property: driver for class: Script19, поэтому он выглядит как t он (1) login сценарий не использует класс driver из основного сценария (0)

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

selenium webdriver inside soapui, passing the driver instance

How to pass context from Script to another Class groovy

How to define a global class in SoapUI as a groovy script?

и я очень стараюсь, чтобы избежать .jar в ext реж образом, просто потому, что мы хотим, чтобы избежать любой ценой (обучение в основном) с помощью другой программы сделать это. Кроме того, гораздо эффективнее, если мы увидим, что вызываемый код вместо импорта его в скрипт изменяется при изменении веб-сайта.

Все три этих сценария находятся в одном проекте и наборе тестов, но в разных тестовых случаях. Это было сделано из-за того, что в тестовом примере для входа в систему будут выполняться несколько этапов/сценариев тестирования с различными способами и подробностями входа. Я использую автономный сервер webdriver

+0

Выглядит описание немного запутанным, когда вы говорите, «** Я 'm не передавать один и тот же драйвер из исходного сценария, который запускается - я пробовал делать все импорт и материал драйвера внутри главного сценария бегуна и просто иметь общий код селена, который вызвал безрезультатно. ** «Может вы можете отредактировать вопрос и уточнить детали, как то, что вы подразумеваете под основным сценарием? Как определяется ваш тестовый пример/набор тестов? Что такое драйвер для запуска его из 'soapUI', вместо того, чтобы использовать его из _outside_, например' command-line'? И почему вы пытаетесь избежать «.jar»? – Rao

+0

@ Rao надеюсь, что его яснее? – MistaWizard

ответ

2

Позвольте мне вначале определить несколько пунктов.

  • по умолчанию переменные, определенные в одном groovy script не может быть доступен во втором заводном сценариинезависимо от того, где заводных скриптов расположены
  • один не может использовать свойство [тестовый случай/люкс/проект] для хранения сложных объектов, в связи с тем, что soapui использует StringToString Map

Каков путь: Groovy скрипт, по умолчанию, имеет доступ к переменным ниже:

 
- context 
- testRunner 
- log 

Итак, context то, что вы можете использовать для инициализации объекта в одном месте и доступ к ним в любом месте. Это зависит от того, в каком контексте объект инициализируется или задается, тем не менее, использовать тот же контекст при извлечении объекта. Таким образом, экземпляр Webdriver создается один раз и получает доступ с использованием других переменных context.

Примечание: инициализации должно быть сделано, прежде чем получить доступ к объекту в первый раз. В противном случае, он будет в конечном итоге с NullpointerException

Здесь я хотел бы предложить, чтобы установить нужный объект в Project level, так что тот же объект доступен в любом месте с в проекте SoapUI. Тем не менее, это не мешает вам использовать уровни набора тестов и случаев.

Ниже приведены дополнительные заявления (заявления) в вашем first groovy script. Сохраните его после создания объекта driver.

Set/Инициализация объекта драйвера:

 
    //your existing code goes here 
    def projectContext = context.testCase.testSuite.project.context 
    projectContext.driver = driver 

Get/Acessing объект драйвера еще где:

 
    def projectContext = context.testCase.testSuite.project.context 
    def driver = projectContext.driver 
    //then use driver object below. 
+0

Спасибо @Rao, я играл с переменной «context» в течение выходных, но я сделал это намного сложнее, чем добавление двух строк кода в каждом скрипте :) Простота - это обычно ответ - еще раз спасибо за удивительный ответ! – MistaWizard

+0

См. Также: http://stackoverflow.com/a/41280226/363573 – Stephan