Статический webdriver является нулевым в селене - PullRequest
0 голосов
/ 12 сентября 2018

Я начинаю с селена, а также читаю об объектной модели страницы. Я попытался реализовать пример кода, и теперь у меня есть 2 вопроса:

  1. Как запустить еще один тестовый пример после проверки входа в систему?
  2. Я реализовал статический WebDriver для доступа к нему отовсюду. Почему в случае 2 он равен нулю?

Мой класс WebDriver:

public class BrowserFactory {


public static WebDriver driver;

@BeforeClass
public static WebDriver startBrowser(String browserName, String url) throws Exception {

    System.setProperty("webdriver.gecko.driver","C:\\selenium-driver\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver","C:\\selenium-driver\\chromedriver.exe");

    if (browserName.equals("")) {
        System.out.println("No Browser Parameter given, use default Browser Firefox");
        browserName = "Firefox";
    }

    if (browserName.equalsIgnoreCase("Firefox")) {
        driver = new FirefoxDriver();
    } else if (browserName.equalsIgnoreCase("Chrome")) {
        driver = new ChromeDriver();
    } else if(browserName.equalsIgnoreCase("IE")){
        driver = new InternetExplorerDriver();
    }else {
        System.out.println("Browser not defined!");
        throw new Exception("Browser not defined!");
    }

    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    driver.manage().window().maximize();
    driver.get(url);

    return driver;
}

@AfterClass
public void teardown () {
    driver.quit();
}
}

LoginTest-Class (рабочий):

public class LoginPageTest {


@Test
public void checkValidUser() throws Exception {

    BrowserFactory.driver = BrowserFactory.startBrowser("Chrome","http://localhost:8080/cleo");
    LoginPage loginPage=new LoginPage(BrowserFactory.driver);
    KundenverwaltungPage kundenVerwaltungPage = new KundenverwaltungPage(BrowserFactory.driver);

    assertTrue(loginPage.isInitialized());

    loginPage.loginCleo("makler1", "12345a");

    assertTrue(kundenVerwaltungPage.isInitialized());

}
}

Тест-кейс 2:

public class SecondCasePageTest {

@Test
public void processSelectedKunden() throws Exception {

    System.out.println(BrowserFactory.driver);

    SecondCasePage scPage = new SecondCasePage(BrowserFactory.driver);

    assertTrue(scPage.isInitialized());

    scPage.selectCostumer(0);


}
}

1 Ответ

0 голосов
/ 12 сентября 2018

Это потому, что во втором тестовом примере вы звоните System.out.println(BrowserFactory.driver); без присвоения какого-либо значения BrowserFactory.driver

Как и в первом тестовом примере, вам нужно BrowserFactory.driver = BrowserFactory.startBrowser("Chrome","http://localhost:8080/cleo");, а затем выполнить System.out.println(BrowserFactory.driver);

На данный момент сам драйвер не null

Я бы сказал, чтобы изменить этот дизайн. Поскольку вы используете nUnit framework, вы можете просто расширить класс BrowserFactory в ваших тестовых случаях. Таким образом, метод startBrowser автоматически выполняется благодаря аннотации beforeClass. Так что вам не нужно беспокоиться о нулевом драйвере.

Это будет выглядеть как

public class LoginPageTest extends BrowserFactory {

...

}

Также не рекомендуется устанавливать driver как static, так как вы можете столкнуться с проблемой многопоточности при запуске параллельных тестов с использованием testNG

Что касается вопроса # 1, вы можете создать testng.xml с обоими тестами и затем запустить testng.xml. Это поможет вам выполнить оба теста. Но, пожалуйста, помните, что порядок выполнения тестов не гарантируется. В этом случае вы должны начать использовать @dependsOnGroups аннотацию или вы также можете использовать preserve-order="true" в вашем testng.xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...