在groovy脚本之间传递webdriver实例?

时间:2016-01-21 11:16:19

标签: selenium selenium-webdriver groovy soapui

我们一直试图弄清楚如何调用,(0)从一个groovy脚本,(1)一个selenium网站登录,然后(2)调用导航(脚本)部分坐在另一个测试用例。独立运行100%。下面是我用来调用(0)中的两个脚本的代码,但是一旦用login.run完成,就会打开一个新的浏览器select.run,显然测试失败,因为它& #39;未登录。

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所以看起来(1)login脚本不是driver脚本使用{{ 1}}来自主脚本(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独立服务器

1 个答案:

答案 0 :(得分:2)

首先我要澄清几点。

  • 默认情况下,无法在第二个groovy脚本 中访问一个groovy script中定义的变量,无论Groovy脚本位于何处
  • 由于soapui使用StringToString Map
  • ,因此无法使用属性[test case / suite / project]存储复杂对象

方式是什么: 默认情况下,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.