在Selenium中将Webdriver实例从一种方法传递到另一种方法(同一类)

时间:2018-11-19 12:29:49

标签: java selenium selenium-webdriver testng

我班上共有四种方法

我已经创建了一个静态WebDriver对象

static WebDriver driver;

方法1:登录网站(在这里我初始化WebDriver driver=new new FirefoxDriver();

方法2:单击站点中的链接(使用WebDriver驱动程序) 点击后,该链接将在同一浏览器的新标签页中打开

方法3:

现在在方法3中,我切换到新标签页,并对新标签页中的网络元素执行一些操作

下面的代码用于切换到新标签页

ArrayList<String> tabss = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabss.get(1));

方法4:同样,我想在新标签页中执行更多操作

现在,我需要在方法4的方法3中使用的相同驱动程序实例(选项卡)。

我怎么得到

如果在方法4中使用“驱动程序”,则为空。

public class download {
    static WebDriver driver;


    @Test
    public static void login() throws InterruptedException
    {
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("__site__");
        driver.findElement(By.id("login-email")).sendKeys("__username__");
        driver.findElement(By.id("login-password")).sendKeys("__password__");
        driver.findElement(By.id("login-submit")).click();
        Thread.sleep(3000);
    }


    @Test
    public static void navigatetolearningpage() throws InterruptedException
    {

        driver.findElement(By.xpath("//div[@class='relative ember-view']")).click();
        Thread.sleep(3000);
    }

    @Test
    public static void search() throws InterruptedException, AWTException
    {

        ArrayList<String> tabss = new ArrayList<String> (driver.getWindowHandles());
        driver.switchTo().window(tabss.get(1));
        driver.findElement(By.xpath("//input[@type='text']")).sendKeys("__searchkeyword__");
        Thread.sleep(3000);
        driver.findElement(By.xpath("//input[@type='text']")).sendKeys(Keys.RETURN);
        Thread.sleep(3000);
        driver.findElement(By.xpath("//div[@class='search-facet__label']")).click();

    }

    @Test 
    public static void course_list() throws InterruptedException
    {
        //This driver will print as NULL
        System.out.println("last method:"+driver);

    }

}

1 个答案:

答案 0 :(得分:1)

不能保证测试的顺序,因此您需要在测试开始时初始化driver

将初始化代码移至driver的声明:

static WebDriver driver = new FirefoxDriver();

编辑

在@Laazo评论之后, 我认为这比将其添加到@BeforeClass更好,因为如果切换到TestNG框架,则需要将JUnit5更改或升级到@BeforeAll