基类:
protected WebDriver driver;
protected String URL = "https://www.example.com/";
public static String SignupURL = "https://www.example.com/login";
public Login loginpage;
@BeforeClass
public void setup()
{
System.setProperty("webdriver.chrome.driver","E:\\Selenium-Webdriver\\Chrome_Driver\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.navigate().to(URL);
loginpage = PageFactory.initElements(driver,Login.class);
}
登录类:
protected WebDriver driver;
public Login(WebDriver driver) {
this.driver = driver;}
public Login Method1()
{
//Logic
}
LoginTest类:
public class LoginTest extends Base {
@Test
public void method1()
{
setup() //Have to Call it
//Logic
}
@Test
public void method2
{
setup() //Have to Call it
//Logic
}
}
问题是为什么需要为测试类中的每个方法调用 setup()方法。
我已经在扩展课程,然后驱动程序应该自动调用,但事实并非如此。当我没有调用 setup()然后获取 Nullpointer Exception 时,如果我调用它,那么系统会为每个方法打开新的浏览器。
答案 0 :(得分:0)
您在Base类中使用@BeforeClass,如果将其更改为@BeforeSuite,则无需调用该安装方法。通常我会在mybase类中使用@BeforeSuite并将其扩展到所有测试类以在该浏览器上工作。
下面有一个为我工作
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeSuite;
public class Base {
protected WebDriver driver;
protected String URL = "https://www.google.com/";
public static String SignupURL = "https://www.google.com/";
//public Login loginpage;
@BeforeSuite
public void setup()
{
// System.setProperty("webdriver.chrome.driver","E:\\Selenium-Webdriver\\Chrome_Driver\\chromedriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.navigate().to(URL);
// loginpage = PageFactory.initElements(driver,Login.class);
}
}
import org.testng.annotations.Test;
public class TestCasePage1 extends Base{
@Test
public void testit(){
System.out.println(driver.getTitle());
}
@Test
public void testit1(){
System.out.println(driver.getTitle());
}
}
谢谢你, 穆拉利
答案 1 :(得分:0)
问题在于@BeforeClass
未命中(alwaysRun=true)
。因此,如果在您的基类中编写@BeforeClass(alwaysRun=true)
。然后,您不需要在其他课程中调用设置。