Параллельные методы не работают, как ожидалось - PullRequest
0 голосов
/ 27 марта 2019

Мне нужно, чтобы все тесты были частью одного класса и выполнялись параллельно.Я использую параллельные = "методы" в Testng.xml.У меня есть класс, как

 Public class DemoParallel{
@Test
/* some code to launch Google.*/
@Test
 /* some code to launch Facebook*/
 }

Фактически: 2 случая запуска Chrome.Тест Google полностью запущен. Тест Facebook запускается, но не запускается.ЗависаетПрошел только один тест, а также попытался реализовать слушателей, но не повезло.Любые предложения будут полезны.

1 Ответ

0 голосов
/ 27 марта 2019

Локальный завод водителей:

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;

class LocalDriverFactory {
    static WebDriver createInstance(String browserName) {
        WebDriver driver = null;
        if (browserName.toLowerCase().contains("firefox")) {
            System.setProperty("webdriver.firefox.marionette","path to driver exe");
            driver = new FirefoxDriver();
            return driver;
        }
        if (browserName.toLowerCase().contains("internet")) {
            driver = new InternetExplorerDriver();
            return driver;
        }
        if (browserName.toLowerCase().contains("chrome")) {
            System.setProperty("webdriver.chrome.driver","path to driver exe");
            driver = new ChromeDriver();
            return driver;
        }
        return driver;
    }
}

используйте класс ThreadLocal следующим образом:

public class LocalDriverManager {
    private static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();

    public static WebDriver getDriver() {
        return webDriver.get();
    }

    static void setWebDriver(WebDriver driver) {
        webDriver.set(driver);
    }
}

Создание класса прослушивателя Webdriver:

import org.openqa.selenium.WebDriver;
import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestResult;

 public class WebDriverListener implements IInvokedMethodListener {
@Override
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
    if (method.isTestMethod()) {
        String browserName = method.getTestMethod().getXmlTest().getLocalParameters().get("browserName");
        WebDriver driver = LocalDriverFactory.createInstance(browserName);
        LocalDriverManager.setWebDriver(driver);
    }
}

@Override
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
    if (method.isTestMethod()) {
        WebDriver driver = LocalDriverManager.getDriver();
        if (driver != null) {
            driver.quit();
        }
    }
}

}

Тестовый класс

public class ThreadLocalDemo {
    @Test
    public void testMethod1() {
        invokeBrowser("https://www.google.com/");
    }

    @Test
    public void testMethod2() {
        invokeBrowser("http://www.facebook.com");

    }

    private void invokeBrowser(String url) {
        System.out.println("Thread id = " + Thread.currentThread().getId());
        System.out.println("Hashcode of webDriver instance = " + LocalDriverManager.getDriver().hashCode());
        LocalDriverManager.getDriver().get(url);

    }
}

Файл Suite XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">
<listeners>
<listener class-name="path-to-class-WebDriverListener"></listener>
</listeners>
    <test name="Test">
        <parameter name="browserName" value="firefox"></parameter>
        <classes>
            <class name="path-to-class-ThreadLocalDemo" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...