TestNG Parameter не распознает строковый параметр - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь запустить скрипт Selenium с возможностью его запуска с использованием chrome или безголового драйвера. Возможно, это неправильный способ реализации этого, но это была моя первая идея. Решение может состоять в том, чтобы полностью этого избежать ...

В методе настройки я использую параметры TestNG, чтобы определить, в какой среде я хочу выполнить тест, а также какой драйвер я хочу использовать. Тег @Optional используется для определения значения по умолчанию, если оно не указано.

public class Test1 {

@Parameters({"envDomain","driverName"})
@BeforeTest
public void setUp(@Optional("alpha1")String envDomain, @Optional("chrome")String driverName) {
    PropertiesCollection.selectDriver(driverName);
    PropertiesCollection.env_domain = envDomain;
}

Метод PropertiesCollection.selectDriver () принимает строковое имя, чтобы решить, на что установить драйвер.

public class PropertiesCollection {
public static WebDriver driver;
public static WebDriverWait wait;
public static String env_domain;

public static void selectDriver(String driverName) {

    if (driverName == "chrome") {
        String projectPath = System.getProperty("user.dir");
        System.setProperty("webdriver.chrome.driver", projectPath + "\\configs\\WebDrivers\\chromedriver_win32\\chromedriver.exe");
        PropertiesCollection.driver = new ChromeDriver();
    }

    if (driverName == "headless") {
        PropertiesCollection.driver = new HtmlUnitDriver();
    }

}

Не удается установить драйвер в первом операторе if. Когда я вручную ввожу строку "chrome", она, кажется, работает как положено. Я не уверен, почему он не работает при использовании «chrome» от TestNG. Когда я запускаю его через отладчик, создается впечатление, что driverName установлено в «chrome», но оператор if все еще пропускается.

Пример, который работает:

public class Test1 {

@Parameters({"envDomain"})
@BeforeTest
public void setUp(@Optional("alpha1")String envDomain) {
    PropertiesCollection.selectDriver("chrome");
    PropertiesCollection.env_domain = envDomain;
}

Тег envDomain также работает, как и ожидалось, поэтому я не уверен, почему параметр driverName будет работать по-другому.

1 Ответ

0 голосов
/ 20 марта 2020

Хорошо, я смог решить мою проблему, изменив условное выражение в операторе if.

public class PropertiesCollection {
public static WebDriver driver;
public static WebDriverWait wait;
public static String env_domain;

public static void selectDriver(String driverName) {

    if (driverName.equals("chrome")) {
        String projectPath = System.getProperty("user.dir");
        System.setProperty("webdriver.chrome.driver", projectPath + "\\configs\\WebDrivers\\chromedriver_win32\\chromedriver.exe");
        PropertiesCollection.driver = new ChromeDriver();
    }

    if (driverName.equals("headless")) {
        PropertiesCollection.driver = new HtmlUnitDriver();
    }

}

Кто-то может объяснить более подробно, почему это работает, а почему оригинал - нет. Но я предполагаю, что это как-то связано с вопросом, равен ли параметр самому объекту или равен строковому значению ...

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