Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium和TestNG在一个浏览器中进行所有测试_Java_Testing_Selenium_Selenium Webdriver_Testng - Fatal编程技术网

Java Selenium和TestNG在一个浏览器中进行所有测试

Java Selenium和TestNG在一个浏览器中进行所有测试,java,testing,selenium,selenium-webdriver,testng,Java,Testing,Selenium,Selenium Webdriver,Testng,我有一个抽象类,其中初始化webdriver。所有实现了测试的类都是从他那里继承的。我想减少测试时间,为所有测试打开浏览器 class AbstractClassCase { public static WebDriver driver; @BeforeClass @Parameters({"webDriver", "applicationHost", "applicationPort", "driverHost", "driverPort", "userna

我有一个抽象类,其中初始化webdriver。所有实现了测试的类都是从他那里继承的。我想减少测试时间,为所有测试打开浏览器

class AbstractClassCase {
    public static WebDriver driver;

    @BeforeClass    
    @Parameters({"webDriver", "applicationHost", "applicationPort", "driverHost", "driverPort",  "username", "password"})
    public void setUp(
        String webDriverIdentifier,
        String applicationHost,
        @Optional String applicationPort,
        @Optional String driverHost,
        @Optional String driverPort,
        @Optional String username,
        @Optional String password){      

        driver = new FirefoxDriver();
        driver.get("localhost");
        login(username, password)

    }

    @AfterСlass
    public void tearDown() {   
        driver.quite();
    }     

}

public class TestButton extends AbstractClassCase {
    @Test
    public void testClickButtonNo() {
        WebElement button = driver.findElement(By.id("button-no"));
        button.click();
        WebElement status = driver.findElement(By.id("button-status"));
        Assert.assertEqual("Cancel", status.getText());
   }
}
和其他考试班一样精神


如何重新配置该类,使浏览器打开一次?

如果要在开始时打开浏览器一次并运行所有方法,然后关闭它

我建议遵循以下两个步骤

步骤1: 将浏览器调用代码包含在带有@BeforeSuite@AfterSuite的方法中,以关闭浏览器/驱动器会话。这确保这些测试在测试套件之前和之后运行一次

protected static WebDriver Browser_Session;

@BeforeSuite
public void beforeSuite() {
    Browser_Session=new FirefoxDriver();
    Browser_Session.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);
}

@AfterSuite
public void afterSuite() {
    Browser_Session.quit();
}
步骤2:打开testng.xml并将所有此类类(测试方法)包含在单个套件中,从而确保首先调用浏览器(通过Selenium),然后在同一浏览器中运行其余所有方法。

此处“类Init”包含浏览器启动代码,类A和类B是Init的子类


希望这有帮助

如果您想在一个实例中运行所有测试,我编写了自己的WebDriverFactory,下面是一些帮助示例:

    public static WebDriver getDriver(){
       if (driver == null) {
            return new FireFoxDriver();
        } else {
          return driver;
        }
   }
现在删除AfterClass并将其添加到您的类中,它最终将关闭您的浏览器

static {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                try {
                    dismissDriver();
                } catch (Exception e) {
                }
            }
        });
}

 public static void dismissDriver() {
        if (driver != null) {
            try {
                driver.quit();
                driver = null;
            } catch (Throwable t) {
            }
        }
    }

因此,您希望打开浏览器一次,运行所有测试,然后关闭它。。而不是为每个测试打开浏览器。。是吗?是的。现在在每次测试之前打开-“当测试套件以您喜爱的语言启动时,会发生以下情况:客户端/驱动程序与selenium RC服务器建立连接。selenium RC服务器启动一个浏览器(或重用一个旧的浏览器),其URL将在网页中加载selenium Core。”如果(driver==null){drvier=new FireFoxDrvier()}否则他将使用现有驱动程序并删除afterClass,它将关闭您的浏览器不是因为在第二次测试通过期间发生了NullPointerException吗?您是否已将WebDriver变量声明为静态?@martinixs:是的,我已将WebDriver声明为静态,受保护,并且工作正常。我已更新代码block和TestNG.xml屏幕截图。