当前位置: 首页 > 知识库问答 >
问题:

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

黄英韶
2023-03-14

我们一直在试图找出如何从groovy脚本调用,(0),(1)selenium网站登录,然后调用另一个测试用例中的导航(脚本)部分。两种方法都能100%独立运行。下面是我用来从(0)调用这两个脚本的代码,但一旦登录完成。运行,将使用选择打开一个新浏览器。运行,测试显然会失败,因为它没有登录。

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)

因此,我去操作了登录、选择(通过删除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时)错误:groovy。lang.MissingPropertyException:类:Script19没有这样的属性:驱动程序,因此(1)登录脚本似乎没有使用主脚本(0)中的驱动程序类

我也看过这些类似的问题,但我们的问题似乎与他们的问题太不同了。

soapui中的selenium webdriver,传递驱动程序实例

如何将上下文从脚本传递给另一个类

如何在SoapUI中将全局类定义为groovy脚本?

我非常努力地避免将. jar转换为extdir方式,仅仅是因为我们想不惜一切代价(主要是培训)避免使用另一个程序来执行此操作。如果我们可以看到正在调用的代码,而不是在网站更改时将其导入脚本,那么效率也会高得多。

这三个脚本都在同一个项目和测试套件中,但测试用例不同。之所以这样做,是因为登录测试用例中有多个测试步骤/脚本,具有不同的登录方式和详细信息。我正在使用webdriver独立服务器


共有1个答案

潘皓
2023-03-14

让我先澄清几点。

  • 默认情况下,无论groovy脚本位于何处,都无法在第二个groovy脚本中访问在一个groovy脚本中定义的变量
  • 不能使用属性[测试用例/套件/项目]来存储复杂对象,因为soapui使用了字符串映射

方法:默认情况下,Groovy脚本可以访问以下变量:

- context
- testRunner
- log

因此,上下文可以用来在一个地方初始化对象并在任何地方访问它的东西。这取决于对象在哪个上下文中被初始化或设置,尽管如此,可以说,在检索对象时使用相同的上下文。这样,Web驱动程序实例被创建一次,并使用其他上下文变量进行访问。

注意:必须在首次访问对象之前进行初始化。否则,它将以NullpointerException结束

在这里,我想建议在项目级别设置所需的对象,以便在soapUI项目中的任何位置都可以使用相同的对象。然而,它也不会阻止您使用测试套件/用例级别。

以下是您的第一个groovy脚本中所需的附加语句。请在创建驱动程序对象后保留它。

设置/初始化驱动程序对象:

    //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.
 类似资料:
  • 问题内容: 我敢肯定这很简单,但是我一直无法使其正常工作。我需要让我的主要python脚本调用另一个python脚本,并将变量从原始脚本传递到我已调用的脚本 举一个简单的例子,我的第一个脚本是 我的第二个脚本是 我希望它可以打印x但我得到 我不确定导入是否是实现此目标的正确方法,但是如果有人可以通过简单的方式对此有所了解,那就太好了! 谢谢, 编辑 阅读评论后,我想我会扩展我的问题。Aswin M

  • 问题内容: 我刚开始学习groovy,我想将svnSourcePath和svnDestPath传递给svn copy命令中的shell脚本。但是网址未呈现。 输出量 问题答案: 在变量周围添加了单引号和加operator(’+ variable +’)。现在正在工作

  • browserfunctions.java login.java java

  • 有人能解释jenkins中执行groovy脚本和执行系统groovy脚本之间的区别吗?以及如何使用执行系统groovy脚本将脚本调用到从属。

  • 问题内容: 我只是从Groovy开始。我在任何地方都找不到如何处理Groovy脚本参数的示例,因此我自己修改了此方法。必须有更好的方法来做到这一点?如果是这样,我正在寻找这种更好的方法,因为我可能忽略了显而易见的方法。 问题答案: 如果您想要的不仅仅是进阶参数解析,还可以使用Groovy CliBuilder来帮助您。它可以帮助您使用命令行标志,可选参数和打印用法说明。 签出CliBuilder的

  • 我有一个在生成SpringBoot jar文件后运行的gradle脚本: 到目前为止,gradle脚本只打印了一条消息: 这对我的身材很好。 gradle runScript 任务:运行脚本你好世界从groovy版本2.4.15 我想要的是: 我想做的是传入SpringBoot生成的jar名称,或者在或其他任何东西。 所以它会打印: hello world生成的jar文件名是my-service-