Как инициализировать драйвер один раз в классе WebDriver, а затем использовать его для запуска других классов? - PullRequest
0 голосов
/ 04 декабря 2018

Если у меня есть 10 классов в testng.xml, он откроет 10 сеансов браузера.Как я могу инициализировать драйвер один раз и открыть только один браузер для одного контрольного примера, затем закрыть и снова открыть окно для второго контрольного примера и т. Д.

У меня есть код установки драйвера в конструкторе, которыйможет плохой способ приблизиться к нему?Как я могу инициализировать его в классе TNGDriver и затем использовать его в классе Testcase1?

Я пытался использовать @BeforeClass и у меня есть метод setUp, но это не сработало.

Класс TNGDriver

public abstract class TNGDriver {

public static WebDriver driver;
private static String chromeDriverPath = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe";  

@SuppressWarnings("deprecation")
public TNGDriver() {        
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--incognito");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    System.setProperty("webdriver.chrome.driver", chromeDriverPath);        
    driver = new ChromeDriver(capabilities);    
    driver.manage().window().maximize();            
}

public static WebDriver getDriver() {
    return driver;
}

public static void setDriver(WebDriver driver) {
    TNGDriver.driver = driver;
}

Класс теста1, класс

public class Testcase1 extends Registration {

    @Test(priority = 1) 
    public void step1_checkSomething() {        
        //do something
    }

    @Test(priority = 2)
    public void step2_clickOnSomething() {          
        //click on something            
    }

}

testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="AutomationFramework" parallel="false" preserve-order="true">
    <test name="Registration">      
        <classes>
            <class name="regression.Testcase01" />
            <class name="regression.Testcase02" />              
        </classes>      
    </test>             
</suite>

1 Ответ

0 голосов
/ 05 декабря 2018

Драйвер Chrome открывается каждый раз, когда личное окно по умолчанию, вам это не нужно на самом деле.

//options.addArguments("--incognito");

Вы можете сделать структуру, как показано ниже:

public class TNGDriver {

public static WebDriver driver;
private static String chromeDriverPath = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe";  

public void DriverConfiguration() {        
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--incognito");  
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    System.setProperty("webdriver.chrome.driver", chromeDriverPath);        
    driver = new ChromeDriver(capabilities);    
    driver.manage().window().maximize();            
}

public void QuitDriver(){
    driver.quit();
}

}

Модульные тесты:

public class Testcase1 extends Registration {

TNGDriver objTND = new TNGDriver();

    @BeforeTest
    public void initializeDriver(){
    objTND.DriverConfiguration();  
    }

    @Test(priority = 1) 
    public void step1_checkSomething() {        
        //do something
    }

    @Test(priority = 2)
    public void step2_clickOnSomething() {          
        //click on something            
    }

    @AfterTest
    public void initializeDriver(){
    objTND.QuitDriver();  
    }
}

Если вы хотите использовать браузер (для открытия) перед каждым @Test, вы можете использовать этот же метод с аннотацией @BeforeMethod.

...