java页对象模型没有从类扩展驱动程序

3npbholx  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(334)

基类:

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异常,如果我调用它,系统就会为每个方法打开新的浏览器。

yebdmbv4

yebdmbv41#

您正在基类中使用@beforeclass,如果将其更改为@beforesuite,则无需调用该安装方法。一般来说,我会在我的基类中使用@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());
}

}

谢谢你,穆拉里

3bygqnnd

3bygqnnd2#

问题是 @BeforeClass 未命中 (alwaysRun=true) . 所以如果,在你的基类中,你写 @BeforeClass(alwaysRun=true) . 那么就不需要在其他类中调用setup。

相关问题