Параллельное тестирование Selenium - запуск 2 методов из одного класса - PullRequest
0 голосов
/ 11 января 2019

У меня есть класс Java, который открывает два браузера Chrome и ищет «тест 1» и «тест 2» соответственно. Однако, как только откроются оба браузера, только один браузер со страницей Google выполнит поиск «test 1 test 2».

Я полагаю, что это может быть связано с тем, что я вызываю драйвер = новый WebDriver из родительского класса. Однако я не уверен, как решить проблему.

Вот два моих метода, которые я пытаюсь запустить параллельно.

package webDrivertests;

public class googleTestClass extends Methods{

    @Test
    public void test1() throws InterruptedException {

        googleTestClass object1;
        object1 = new googleTestClass();
        object1.launchBrowser();
        object1.goToURL("https://www.google.com");
        object1.enterValue("name","q","google test 1");
        driver.quit();
    }

    @Test
    public void test2() throws InterruptedException {

        googleTestClass object2;
        object2 = new googleTestClass();
        object2.launchBrowser();
        object2.goToURL("https://www.google.com");
        object2.enterValue("name","q","google test 2");
        driver.quit();
    }
}

Это мой XML-файл, который я использую для их вызова.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">
  <test thread-count="2" name="Test" parallel="methods">
    <classes>
      <class name="webDrivertests.googleTestClass"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

Родительский метод, который включает драйвер

package webDrivertests;

// import statements

public class Methods {

    public static WebDriver driver;

    public void launchBrowser() {

         System.setProperty("webdriver.chrome.driver","C:\\chromedriver_win32\\chromedriver.exe");
        System.setProperty("webdriver.chrome.args", "--disable-logging");
        System.setProperty("webdriver.chrome.silentOutput", "true");
        driver = new ChromeDriver();
    }

    public void goToURL(String url) {
        driver.get(url);
    }

        public void enterValue(String htmltype, String identifier, String value) throws InterruptedException {
        if (htmltype == "id") {
            WebElement element = driver.findElement(By.id(identifier));
            element.clear();
            element.sendKeys(value);
            element.submit();
        }
        if (htmltype =="name") {
            WebElement element = driver.findElement(By.name(identifier));
            element.clear();
            element.sendKeys(value);
            element.submit();
        }

        Thread.sleep(3000);
    }

}

Текущий результат: два браузера открыты и каждый переходит на google.com. Однако только один браузер будет искать «тест 1 тест 2». Любая помощь приветствуется! Если возможно, я все же хотел бы использовать свой родительский класс «Методы», поскольку он содержит множество методов, которые я использую для других моих реальных тестовых случаев.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Из-за объявления static объекта драйвера в классе он получает переопределенное параллельное выполнение, когда второй тест вызывает launchBrowser ().

Очевидно, что удаление static исправит эту проблему, но все же вы столкнетесь с различными проблемами управления драйвером, пока ваш тестовый стенд и методы увеличиваются.

Я бы порекомендовал использовать любое из расширений TestNG , которое отвечает таким требованиям. Мы используем QAF , который основан на TestNG и обеспечивает управление драйверами, управление ресурсами и многие другие функции, которые имеют решающее значение для тестирования веб / мобильных / веб-сервисов.

0 голосов
/ 15 января 2019

Проблема заключается в вашем тестовом коде. Объект WebDriver объявляется как статический объект.

Таким образом, каждый метод тестирования использует один и тот же экземпляр.

Чтобы устранить проблему, удалите ключевое слово static из объявления WebDriver в своем классе Methods и повторите попытку.

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