Невозможно загрузить драйвер chrome / gecko после использования Cucumber Driver Factory - PullRequest
0 голосов
/ 15 ноября 2018

Это мой первый вопрос, когда-либо задаваемый здесь, поэтому я надеюсь, что задаю его правильно: я работаю над многомодульным проектом maven для тестирования программного обеспечения, которое все еще находится в разработке.Я уже некоторое время использую Cucumber, Selenium, JUnit и прохожу онлайн-курсы, чтобы улучшить свои навыки.В одном из руководств было объяснено, как использовать Driver Factory и файлы конфигурации, поэтому я применил его к своему проекту, но после этого не смог запустить ни один из драйверов (gecko / chrome / ie).Вот большая часть кода, поэтому я надеюсь, что кто-то может помочь :)

Я улавливаю исключение из DriverFactory.class:

"Невозможно загрузить браузер: null"


Файл config.properties содержит только одну строку: browser = chrome

public class DriverFactory {

public static WebDriver driver;

public WebDriver getDriver() {
    try {
        //Read Config
        ReadConfigFile file = new ReadConfigFile();
        String browserName = file.getBrowser();

        switch (browserName) {

            case "firefox":
                if (driver == null) {
                    System.setProperty("webdriver.gecko.driver", Constant.GECKO_DRIVER_DIRECTORY);

                    FirefoxOptions options = new FirefoxOptions();
                    options.setCapability("marionette", false);
                    driver = new FirefoxDriver(options);
                    driver.manage().window().maximize();
                }
                break;

            case "chrome":
                if (driver == null) {
                    System.setProperty("webdriver.chrome.driver", Constant.CHROME_DRIVER_DIRECTORY);

                    driver = new ChromeDriver();
                    driver.manage().window().maximize();
                }
                break;

            /*case "ie":
                if (driver == null) {
                    DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
                    System.setProperty("webdriver.ie.driver", Constant.IE_DRIVER_DIRECTORY);
                    capabilities.setCapability("ignoreZoomSetting", true);
                    driver = new InternetExplorerDriver(capabilities);
                    driver.manage().window().maximize();
                }
             */
        }
    } catch (Exception e) {
        System.out.println("Unable to load browser: " + e.getMessage());
    } finally {
        driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
    }
    return driver;
}

public class ReadConfigFile {
protected InputStream input = null;
protected Properties prop = null;

public ReadConfigFile() {
    try {
        input = ReadConfigFile.class.getClassLoader().getResourceAsStream(Constant.CONFIG_PROPERTIES_DIRECTORY);
        prop = new Properties();
        prop.load(input);
    } catch(IOException e) {
        e.printStackTrace();
    }
}

public String getBrowser() {
    if(prop.getProperty("browser") == null) {
        return "";
    }
    return prop.getProperty("browser");
}

public class Constant {

public final static String CONFIG_PROPERTIES_DIRECTORY = "properties\\config.properties";
public final static String GECKO_DRIVER_DIRECTORY = System.getProperty("user.dir") + "\\src\\test\\resources\\geckodriver.exe";
public final static String CHROME_DRIVER_DIRECTORY = System.getProperty("user.dir") + "\\src\\test\\resources\\chromedriver.exe";

public class CreateCaseSteps extends DriverFactory {

//Background Steps

@Given("^user accesses the login page$")
public void userAccessesTheLoginPage() throws Throwable {
    getDriver().get("http://localhost:8080/");
}

@When("^user enters a valid username")
public void userEntersAValidUsername(DataTable table) throws Throwable {
    Thread.sleep(3000);
    List<List<String>> data = table.raw();
    getDriver().findElement(By.xpath("//input[@placeholder='username']")).sendKeys(data.get(0).get(0));
}

@When("^user enters a valid password")
public void userEntersAValidPassword(DataTable table) throws Throwable {
    Thread.sleep(3000);
    List<List<String>> data = table.raw();
    getDriver().findElement(By.xpath("//input[@placeholder='password']")).sendKeys(data.get(0).get(0));
}

@And("^user clicks on the login button$")
public void userClicksOnTheLoginButton() throws Throwable {
    getDriver().findElement(By.xpath("//input[@value='Login']")).click();
}

@Then("^user should be taken successfully to the login page$")
public void userShouldBeTakenSuccessfullyToTheLoginPage() throws Throwable {
    Thread.sleep(3000);
    WebElement logoutMenu = getDriver().findElement(By.xpath("//i[@class='glyphicon glyphicon-user']"));
    Assert.assertEquals(true, logoutMenu.isDisplayed());
}
...