我在自动化过程中使用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");
}
}
答案 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
,因此同一会话将继续