将Webdriver作为实例传递

时间:2015-03-12 20:24:32

标签: java selenium webdriver

我正在尝试做的是允许用户的一个部分允许用户使用webdriver运行一些测试。然后,在不关闭该窗口的情况下,对Web应用程序进行更改,然后启动单独的方法来执行其他操作。

我创建的是类BrowserBgent,它包含一个Webdriver对象,如下所示:

 public class BrowserAgent
{
    private static BrowserAgent instance = new BrowserAgent();
    private boolean BrowserAgentBusy = false;
    private static boolean BrowserAgentActive = false;
    private static WebDriver driver;
...

现在当我得到驱动程序的实例时,我只是调用BrowserAgent.getDriver(),它实现如下:

public static WebDriver getDriver()
    {    
        if(BrowserAgentActive && driver != null)
        {
            return driver;
        }
        else
        {
            BrowserAgentActive = true;
            return new FirefoxDriver();
        }

    }

但是,出于某种原因,每次调用getDriver()时,都会打开一个新窗口,并且第一个窗口中的所有上下文现在都会丢失。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您永远不会将驱动程序设置为任何内容,因此它始终为null,并且您的代码始终采用else {}分支。

这就是我可以这样做的方式:

using System;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;

namespace DriverTesting
{
    [TestFixture]
    public class UnitTest1
    {
        [Test]
        public void TestMethod1()
        {
            IWebDriver myDriver = BrowserAgent.getDriver();
            myDriver.Navigate().GoToUrl("http://www.google.com/");
        }

        [Test]
        public void TestMethod2()
        {
            IWebDriver myDriver = BrowserAgent.getDriver();
            myDriver.Navigate().GoToUrl("http://www.yahoo.com/");
        }
    }
}

public class BrowserAgent
{
    private static IWebDriver driver;

    public static IWebDriver getDriver()
    {
        if (driver == null) {
            driver = new InternetExplorerDriver();
        }
        return driver;
    }
}