В моем существующем фреймворке я обычно могу запустить один браузер с помощью следующих шагов:
1.Файл configuration.properties: указаны пути к исполняемому драйверу и URL-адресу
2.Класс ConfigFileReader: для чтения файла конфигурации
public static Properties properties;
private final String
propertyFilePath="src/test/resources/configurations/configuration.properties"
public ConfigFileReader(){
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(propertyFilePath));
properties = new Properties();
try {
properties.load(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
} }
catch (FileNotFoundException e)
{
e.printStackTrace();
throw new RuntimeException("Config.properties not found at " + propertyFilePath);
public String getApplicationUrl() {
String url = properties.getProperty("url");
if(url != null) return url;
else throw new RuntimeException("url not specified in the Config.properties file.");
}
public String getDriverPath(){
String driverPath =properties.getProperty("chromedriverpath");
if(driverPath!= null) return driverPath;
else throw new RuntimeException("Chrome driverPath not
specified in the Config.properties file.");
}
}
3.Класс DriverType: определены различные драйверы
public enum DriverType {
FIREFOX,
CHROME,
INTERNETEXPLORER }
4.Класс EnvironmentType: для выбора среды
public enum EnvironmentType {
LOCAL,//own system
REMOTE,//docker some other software }
4.Класс WebDriverManager: код для выбора драйвера
package managers;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import enums.DriverType;
import enums.EnvironmentType;
public class WebDriverManager {
private WebDriver driver;
private static DriverType driverType;
private static EnvironmentType environmentType;
private static final String CHROME_DRIVER_PROPERTY =
"webdriver.chrome.driver";
private static final String FIREFOX_DRIVER_PROPERTY = "webdriver.gecko.driver";
public static Properties reportportal = null;
public WebDriverManager() {
driverType = FileReaderManager.getInstance().getConfigReader().getBrowser();
environmentType = FileReaderManager.getInstance().getConfigReader().getEnvironment();
}
public WebDriver getDriver() {
if(driver == null) driver = createDriver();
return driver;
}
private WebDriver createDriver() {
switch (environmentType) {
case LOCAL : driver = createLocalDriver();
break;
case REMOTE : driver = createRemoteDriver();
break;
}
return driver;
}
private WebDriver createRemoteDriver() {
throw new RuntimeException("RemoteWebDriver is not yet implemented");
}
private WebDriver createLocalDriver() {
switch (driverType) {
/*case FIREFOX : driver = new FirefoxDriver();
break;*/
case CHROME :
System.setProperty(CHROME_DRIVER_PROPERTY, FileReaderManager.getInstance().getConfigReader().getDriverPath());
driver = new ChromeDriver();
break;
}
if(FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize()) driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
return driver;
}
public static void loadReportPoratlProperty() throws IOException {
reportportal = new Properties();
FileInputStream ip = new FileInputStream(
System.getProperty("user.dir") + "\\src\\test\\resources\\config\\reportportal.properties");
reportportal.load(ip);
}
public void closeDriver() {
driver.close();
driver.quit();
}
}
Это фактический набор, который я сделал для выбора драйвера, и я могу выполнить с файлом ниже testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="First Suite" >
<test name="Chrome Test" >
<classes>
<classname ="tests.report.runners.ReportRunner"></class>
</classes>
</test>
</suite>
Что я хочу сделать сейчас:
- С помощью крючков для огурцов я могу разместить все эти предпосылки и параметры публикации централизованно
Пример:
public class Hooks {
@Before
public void beforeScenario(){
//Launch browser
//send url
System.out.println("This will run before the Scenario");
}
@After
public void afterScenario(){
//quit browser
System.out.println("This will run after the Scenario");
}
}
** `
Итак, как реструктурировать класс Hooks для URL и настройки драйвера?
`**