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

时间:2014-03-07 10:57:18

标签: selenium groovy selenium-webdriver soapui

我目前正在研究在soapui内部维护的测试套件。此测试套件还包含一些实现为HTTP.GETHTTP.POST请求的Web功能测试。我想将这些测试移植到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()       
}
}

当我运行它时,我得到:

  

Fri Mar 07 13:09:44 EET 2014:ERROR:java.lang.NullPointerException:   无法在null对象上调用方法findElement()   java.lang.NullPointerException:无法调用方法findElement()   null对象         at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)         在org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)         在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)         在org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:32)         在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)         在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)         在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)         在LoginPage.login(Script52.groovy:34)         在LoginPage $ login.call(未知来源)         在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)         在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)         在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)         在Script52.run(Script52.groovy:9)         在com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:96)         在com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:149)         在com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel $ RunAction $ 1.run(GroovyScriptStepDesktopPanel.java:274)         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)         at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)         在java.lang.Thread.run(未知来源)

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

public void login(){
        driver = initDriver()

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

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

如果不是编写类而只是简单地调用WebDriver例程,那么一切正常。有没有人试过这样的东西?它甚至可能还是我遗漏了一些明显的东西(soapUI没有提供太多的调试选项)

2 个答案:

答案 0 :(得分:1)

您似乎不应该将驱动程序初始化为WebDriver driver = null;它应该只是WebDriver driver; 另外你写了

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

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

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

答案 1 :(得分:1)

在构造函数中,将driver设置为:

    driver = initDriver()

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

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

但如果不是null

,则不要返回任何内容

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

尝试更改:

    driver = initDriver()

    initDriver()

在构造函数