Прехвърляне на екземпляра на webdriver между groovy скриптове?

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

Разгледах и тези подобни проблеми, но нашите изглеждаха твърде различни от техните.

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

Как да предадете контекст от Script към друг клас groovy

Как да дефинирам глобален клас в SoapUI като groovy скрипт ?

и аз много се опитвам да избегна .jar в ext dir начин, просто защото искаме да избегнем на всяка цена (най-вече обучение) използването на друга програма за това. Също така е много по-ефективно, ако можем да видим извиквания код, вместо да го импортираме в скрипт, докато уебсайтът се променя.

И трите от тези скриптове са в един и същи проект и тестов пакет, но различни тестови случаи. Това беше направено, защото ще има множество тестови стъпки/скриптове в тестовия случай за влизане с различни начини и подробности за влизане. Използвам самостоятелен сървър на webdriver


person MistaWizard    schedule 21.01.2016    source източник
comment
Изглежда, че описанието е малко объркващо, когато казвате, Не предавам същия драйвер от оригиналния скрипт, който се изпълнява - опитах се да направя всички неща за импортиране и драйвери вътре в главния скрипт за изпълнение и имам само общия selenium код, извикан безрезултатно. Можете ли да редактирате въпроса и да изясните подробностите, като какво имате предвид под основен скрипт? Как е дефиниран вашият тестов случай/тестов пакет? Какъв е драйверът, за да го стартирате от soapUI, вместо да го използвате от вън като command-line? И защо се опитваш да избегнеш .jar?   -  person Rao    schedule 21.01.2016
comment
@Rao се надявам да е по-ясно?   -  person MistaWizard    schedule 23.01.2016


Отговори (1)


Нека първо изясня няколко точки.

  • по подразбиране променливата, дефинирана в един groovy script, не може да бъде достъпна във втори groovy скрипт независимо къде се намират groovy скриптовете
  • човек не може да използва свойствата [test case / suite / project] за съхраняване на сложни обекти, поради факта, че 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