在webdriver中维护浏览器会话

时间:2013-07-29 05:11:04

标签: java eclipse selenium-webdriver junit4

我在自动化过程中使用Junit 4和Selenium webdriver。我有多个测试用例,每个测试用例都需要登录功能。

我想在同一浏览器窗口中运行所有测试用例并维护登录会话,而不是为每个测试用例打开新浏览器,并且每次都进行登录。 (在我目前的脚本中,我在每个测试用例中启动webdriver,它为每个测试用例打开一个新窗口,并且每次都进行登录)

我想运行一个测试套件,我希望在同一浏览器窗口中运行所有测试用例。请给我一个解决方案。  代码:

public class first {
public static WebDriver driver;
@BeforeClass
public static void beforeClass()
{
    System.setProperty("webdriver.chrome.driver", "E:/chromedriver.exe");
    System.out.println("Before class");
    driver = new ChromeDriver();
}
@Test
public void login()throws Exception
{
        driver.get("URL");
    WebElement login = driver.findElement(By.xpath("my xpath");
    login.findElement(By.id("username")).sendKeys("username");
    login.findElement(By.id("password")).sendKeys("pwd");
    driver.findElement(By.xpath("my xpath")).click();
}

}

创建第二堂课:

public class second {
public static WebDriver driver;
{
@Test
public void nextstep()throws Exception
{
    WebElement buttons = driver.findElement(By.xpath("my xpath"));
    buttons.findElement(By.className("Classname")).click();

}

}

测试套件类:

@RunWith(Suite.class)
@SuiteClasses({first.class, second.class})
public class testsuite 
{
public static WebDriver driver;
@BeforeClass
public static void setUpClass()
{
    System.out.println("Master Setup");
}

}

2 个答案:

答案 0 :(得分:0)

您需要实现一个 Suite Setup 方法,该方法会打开一个新的浏览器窗口并登录。这样,该方法将在执行所有测试之前调用一次。

要将方法指定为套件设置方法,请将其置于套件类中,将其设为静态并使用@BeforeClass对其进行注释(请参阅this answer中的示例)。

在您发布的代码中,第一个类中的driver变量和第二个类中的driver变量不是同一个变量。这就是为什么在第一个类中初始化它会使第二个类中的driver初始化并获得NullPointerException
如果你想在两个类中使用相同的变量,你需要定义一个具有非静态变量driver的基类(为什么你首先使它变为静态?),然后派生出两个类基类。

答案 1 :(得分:-1)

driver.get("URL");
WebElement login = driver.findElement(By.xpath("my xpath");

此代码必须放入@Before方法而不是@Test,因此同一会话将继续