Передача экземпляра веб-драйвера между отличными сценариями?

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

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)

Итак, я пошел и манипулировал login, select (удалив код веб-драйвера), и основной код скрипта теперь выглядит так (я исключил импорт в этой пасте):

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, поэтому похоже, что сценарий (1)login не использует класс driver из основного сценария (0)

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

selenium webdriver внутри soapui, передавая экземпляр драйвера

Как передать контекст из скрипта в другой класс groovy

Как определить глобальный класс в SoapUI как отличный скрипт ?

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

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


person MistaWizard    schedule 21.01.2016    source источник
comment
Похоже, что описание немного сбивает с толку, когда вы говорите: Я не передаю тот же самый драйвер из исходного сценария, который запускается — я попытался выполнить весь импорт и драйверы внутри основного сценария запуска и просто получил общий код селена, вызванный безрезультатно. Не могли бы вы отредактировать вопрос и уточнить детали, например, что вы подразумеваете под основным сценарием? Как определяется ваш тестовый пример/набор тестов? Что является драйвером для запуска из soapUI, а не из снаружи, как command-line? И почему вы пытаетесь избежать .jar?   -  person Rao    schedule 21.01.2016
comment
@ Рао, надеюсь, стало понятнее?   -  person MistaWizard    schedule 23.01.2016


Ответы (1)


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

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

Как это сделать? Groovy Script по умолчанию имеет доступ к следующим переменным:

- context
- testRunner
- log

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

Примечание. Перед первым доступом к объекту необходимо выполнить инициализацию. В противном случае получится NullpointerException

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

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

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

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

Получить/получить доступ к объекту драйвера в другом месте:

    def projectContext = context.testCase.testSuite.project.context
    def driver = projectContext.driver
    //then  use driver object below.
person Rao    schedule 23.01.2016
comment
Спасибо @Rao, я играл с переменной context на выходных, но я сделал ее НАМНОГО сложнее, чем добавление двух строк кода в каждый скрипт :) обычно простота - это ответ - еще раз спасибо за отличный ответ! - person MistaWizard; 25.01.2016