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

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

邵刚洁
2023-03-14

我目前正在开发一个在soapui中维护的测试套件。此测试套件还包含一些web功能测试,这些测试以HTTP的形式实现。获取HTTP。发布请求。我想将这些测试移植到WebDriver。在SoapUI内部,可以运行groovy脚本,基本上让您能够编写java代码,我一直在尝试这样做。

我目前的情况是:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.By;


LoginPage loginPage = new LoginPage();
loginPage.login()

public class LoginPage {

    WebDriver driver = null;

    public WebDriver initDriver(){
        if (driver == null ){
        driver = new FirefoxDriver();
        driver.get("http://mysite")}
    }

//  @FindBy(id = "j_username") WebElement userName;
//  @FindBy(id = "j_password") WebElement password;
//  @FindBy(xpath = "//h2[contains(text(), \"kasutajanime\")]//..//..//input[@class=\"button\"]") WebElement btnSubmit
    public LoginPage(){

        driver = initDriver()
    //  PageFactory.initElements(driver, this);
    }


    public void login(){
        WebElement userName = driver.findElement(By.id("j_username"));
        WebElement password = driver.findElement(By.id("j_password"));
        WebElement btnSubmit = driver.findElement(By.xpath("//h2[contains(text(), \"kasutajanime\")]//..//..//input[@class=\"button\"]"));
        userName.sendKeys("SOAPUI")
        password.sendKeys("soapui")
        btnSubmit.click()       
}
}

当我运行它时,我得到:

2014年3月7日星期五13:09:44 EET:错误:java。lang.NullPointerException:无法对null对象调用方法findElement()。lang.NullPointerException:无法对组织上的null对象调用方法findElement()。科德豪斯。棒极了。运行时。空对象。org上的invokeMethod(NullObject.java:77)。科德豪斯。棒极了。运行时。呼叫站点。PogoMetaClassSite。在org上调用(PogoMetaClassSite.java:45)。科德豪斯。棒极了。运行时。呼叫站点。CallSiteArray。org上的defaultCall(CallSiteArray.java:45)。科德豪斯。棒极了。运行时。呼叫站点。NullCallSite。在org上调用(NullCallSite.java:32)。科德豪斯。棒极了。运行时。呼叫站点。CallSiteArray。org上的defaultCall(CallSiteArray.java:45)。科德豪斯。棒极了。运行时。呼叫站点。抽象调用站点。在org上调用(AbstractCallSite.java:108)。科德豪斯。棒极了。运行时。呼叫站点。抽象调用站点。在LoginPage调用(AbstractCallSite.java:116)。登录(Script52.groovy:34),登录页面$login。在组织上呼叫(未知来源)。科德豪斯。棒极了。运行时。呼叫站点。CallSiteArray。org上的defaultCall(CallSiteArray.java:45)。科德豪斯。棒极了。运行时。呼叫站点。抽象调用站点。在org上调用(AbstractCallSite.java:108)。科德豪斯。棒极了。运行时。呼叫站点。抽象调用站点。在Script52上调用(AbstractCallSite.java:112)。在com上运行(Script52.groovy:9)。eviware。索皮。支持脚本编写。棒极了。SOAPUIGroovyScript引擎。在com上运行(SoapUIGroovyScriptEngine.java:96)。eviware。索皮。impl。wsdl。测试步骤。WsdlGroovyScriptTestStep。在com上运行(WsdlGroovyScriptTestStep.java:149)。eviware。索皮。impl。wsdl。面板。测试步骤。GroovyScript StepDesktopPanel$RunAction$1。在java上运行(GroovyScript StepDesktopPanel.java:274)。util。同时发生的线程池执行器。java上的runWorker(未知源)。util。同时发生的线程池执行器$Worker。在java上运行(未知源代码)。朗。丝线。运行(未知源)

无论如何,即使我这样做:

public void login(){
        driver = initDriver()

它不应该打开新实例,因为我正在检查驱动程序是否存在,它仍然会打开一个新实例。

我一直在尝试将驱动程序实例声明为静态,但没有成功。

如果不是编写类而是简单地调用WebDriver例程,那么一切都可以正常工作。有人试过那样的东西吗?是否有可能或者我遗漏了一些明显的东西(soapUI不提供太多的调试选项)


共有2个答案

郁灿
2023-03-14

在构造函数中,您将驱动程序设置为:

    driver = initDriver()

然后在initDriver()中,如果驱动程序为空,则设置驱动程序

    if (driver == null ){
        driver = new FirefoxDriver()
        driver.get("http://mysite")
    }

但是如果不是null,则不要返回任何内容

然后在构造函数中将driver设置为null

尝试改变:

    driver = initDriver()

    initDriver()

在构造函数中

方和豫
2023-03-14

似乎您不应该将驱动程序初始化为WebDriver=null应该是WebDriver 除此之外,您还可以编写

public WebDriver initDriver(){
            if (driver == null ){
            driver = new FirefoxDriver();
            driver.get("http://mysite")}
        }

但如果你想拥有单一浏览器,你应该拥有

public WebDriver initDriver(){
if (driver == null) {
   driver = new FirefoxDriver();
  }
  return driver;
}

 类似资料:
  • 我是编码新手。以我的知识在已经成功登录。在主页中,当我单击指定的链接时,它会在新选项卡中打开,这是预期的行为。现在,当我尝试点击新打开的选项卡中的元素时,我没有得到这样的元素异常,因为驱动程序实例指向第一个选项卡,而不是第二个选项卡。如何获取新打开的标签页的驱动程序实例。下面是我使用的代码。 //这是基类。 //这是登录测试。 //在新打开的标签中,我需要点击一些元素。这是我正在使用的代码。 请帮

  • 问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0日志= / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sync_

  • 问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0 log = / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sy

  • 下面是mongoDB聚合,它在mongoDB集合项中过滤测试数组。 在使用java BasicDBObject时,将作为字符串,而不是JS 因此,这将解释“undefined”而不是。因此,这将不会按照预期筛选项目。 mongodb java驱动程序库中是否有为这个特定的值定义的常量?这是主要的问题。 不管是谁好奇... 为什么我不使用ODM? 实际上,我们确实为MongoDB使用Spring数据

  • 我是SoapUI的新手,遇到了一个我不明白的问题。目标:我想在不同的测试步骤中将结果从一个Groovy脚本传递到另一个Groovy脚本。 第1步:我有一个生成GUID的Groovy脚本: 步骤2:我有一个属性转移步骤,它接受上述脚本的结果,并将其传递到HTTP请求步骤(正在工作) 步骤3:我有第二个Groovy脚本,它运行curl命令,其中需要包含相同的GUID。 第3步是问题开始的地方。如何从第

  • 在我的公司,我使用SeleniumWebDriver进行自动化测试来自动化Web应用程序,但我直接使用id、xpath和所有工具,而不遵循任何框架,因此现在我遇到了一些问题,必须设计数据驱动的框架。 请建议我如何在eclipse下设置DatadrivenFramwework。要遵循哪些步骤和所有步骤。 谢谢