soapui中的Selenium Webdriver,传递驱动程序实例 [英] selenium webdriver inside soapui, passing the driver instance

查看:130
本文介绍了soapui中的Selenium Webdriver,传递驱动程序实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在研究soapui内部维护的测试套件.该测试套件还包含一些作为HTTP.GETHTTP.POST请求实现的Web功能测试.我想将这些测试移植到WebDriver.在SoapUI内,可以运行一个Groovy脚本,该脚本基本上可以让您访问编写我一直在尝试的Java代码.

I am currently working on a testsuite that is maintained inside soapui. This testsuite also contains some web functionality tests that are implemented as HTTP.GET and HTTP.POST requests. I would like to port those tests to WebDriver. Inside SoapUI, there is a possibility to run a groovy script that basically gives you access to writing java code which I have been trying to do.

我目前所拥有的是:

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:ERROR:java.lang.NullPointerException: 无法在空对象上调用方法findElement()
java.lang.NullPointerException:无法在上调用方法findElement() 空对象 在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) 在java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源) 在java.lang.Thread.run(未知来源)

Fri Mar 07 13:09:44 EET 2014:ERROR:java.lang.NullPointerException: Cannot invoke method findElement() on null object
java.lang.NullPointerException: Cannot invoke method findElement() on null object at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77) at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:32) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at LoginPage.login(Script52.groovy:34) at LoginPage$login.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) at Script52.run(Script52.groovy:9) at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:96) at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:149) at 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) at java.lang.Thread.run(Unknown Source)

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

Anyway, even if I do:

public void login(){
        driver = initDriver()

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

Which shouldn't open new instance as I am checking if the driver exists or not, it still opens an new instance.

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

I have been trying to declare the driver instance as static, but with no luck.

如果不编写类而是仅调用WebDriver例程,则一切正常.有没有人尝试过类似的东西?甚至有可能还是我缺少明显的东西(soapUI没有提供太多调试选项)

If not writing a class but simply calling WebDriver routines, everything works. Has anybody ever tried something like that? Is it even possible or am I missing something obvious (soapUI does not offer too many debugging options)

推荐答案

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

It seems that you shouldn't initialize your driver as WebDriver driver = null; It should be just WebDriver driver; In addition you write

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

但是,如果您要使用单个浏览器,则应该使用

But if you want to have single browser you should have

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

这篇关于soapui中的Selenium Webdriver,传递驱动程序实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆