Soapui 内的 Selenium WebDriver,传递驱动程序实例

标签 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: 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)

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

public void login(){
        driver = initDriver()

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

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

如果不编写类而只是调用 WebDriver 例程,则一切正常。有人尝试过类似的事情吗?是否有可能,或者我错过了一些明显的东西(soapUI 不提供太多的调试选项)

最佳答案

看来您不应该将驱动程序初始化为 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;
}

关于Soapui 内的 Selenium WebDriver,传递驱动程序实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248196/

相关文章:

groovy - Geb 自动化中未调用 env.groovy 的 Before() 方法

groovy 中闭包的序列化

testing - Selenium (Java) - 如何单击链接然后测试窗口是否打开?

java - 如何在控制台输入后触发testng文件的执行

java - 将 highchart SVG 图像与 Selenium 结合使用

jquery - 在 jquery ui 插件中显示日历

javascript - 输入电子邮件地址后,我需要司机按标签两次

java - 有没有办法单击我刚刚使用 java/selenium 安装的 chrome 扩展?

c# - Selenium c# : How to launch Internet Explorer driver in a specific version (IE8 for example)

Java Selenium-link missing field 错误警告给字段