Хотя я запускаю параллельные тестовые случаи с использованием TestNG и selenium-webdriver, есть некоторые экземпляры браузера, которые открываются пустыми и не закрываются даже после завершения выполнения.Я прочитал несколько тем на разных форумах, в которых спрашивали о похожих проблемах, но ни одна из них, похоже, не является той же самой проблемой.
Также кажется, что больше пустых браузеров открыты, когда я добавляю больше тестов в комплект.Ниже приведена информация, относящаяся к java-классам и testng xml:
- Я использую (как уже упоминалось) TestNG - веб-драйвер, с которым я работаю с шаблоном объектов
- .Я запускаю свою автоматизацию из интерфейса javafx,
- , который позволяет пользователю выбирать некоторые параметры.Я использую ChromeDriver
- для эмуляции мобильных устройств.Я использую локальный поток драйвера
- , который позволяет мне использовать эксклюзивный статический драйвер для каждого теста.
- Пустой браузер не открывается, когда я не запускаю параллельно.
Это мой TestNg.xml:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Automation Suite" verbose="2" parallel="classes" thread-count="5">
<listeners>
<listener class-name="com.qa.extentreportlistener.ExtentReportListener"></listener>
</listeners>
<test name="Sanity Test0" parallel="methods" thread-count="3" >
<classes>
<class name="test.test0" />
</classes>
</test>
<test name="Sanity Test1" parallel="methods" thread-count="3">
<classes>
<class name="test.test1" />
</classes>
</test>
<test name="Sanity Test2" parallel="methods" thread-count="3">
<classes>
<class name="test.test2" />
</classes>
</test>
<test name="Sanity Test3" parallel="methods" thread-count="3">
<classes>
<class name="test.test3" />
</classes>
</test>
</suite>
Ниже приведен класс, используемый дляустановить и получить локальный веб-драйвер Thread:
public class WebdriverFactory {
private static ThreadLocal<WebDriver> tlDriver = new ThreadLocal<>();
public synchronized static void setTLDriver () {
String type = TestConfig.getInstance().getProperty(TestConfigKeys.BROWSER).toLowerCase().trim();
if (type.equals("firefox")) {
tlDriver = ThreadLocal.withInitial(() -> new FirefoxDriver(OptionsManager.getFirefoxOptions()));
} else if (type.equals("chrome")) {
tlDriver = ThreadLocal.withInitial(() -> new ChromeDriver(OptionsManager.getChromeOptions()));
}
Log.info("Running setTLDriver -- Browser is "+type +" and Thread Id is "+ Thread.currentThread().getId() );
}
public synchronized static WebDriver getTLDriver ()
{
Log.info("Running getTLDriver -- Thread Id is "+ Thread.currentThread().getId());
return tlDriver.get();
}
}
AbstractTestCase вызывает локальный драйвер Thread из WebDriverFactory и расширяется каждым классом теста:
public abstract class AbstractTestCase {
protected static ReportDispatcher report = ReportManager.getInstance();
private static String url = TestSUT.getInstance().getStringProperty("url");
protected AssertUtils myAssert;
protected Verify verify;
public static Properties props =null;
//protected WebDriver driver = WebdriverFactory.getTLDriver();
@BeforeMethod(alwaysRun = true)
public void setup() throws Throwable, IOException
{
Log.startLog("AbstractTestCase: Test is starting");
WebdriverFactory.setTLDriver();
WebDriver driver = WebdriverFactory.getTLDriver();
driver = new EventFiringWebDriver(driver);
((EventFiringWebDriver) driver).register(new ScreenshotEventListener());
driver.manage().timeouts().implicitlyWait(Integer.valueOf(TestConfig.getInstance().getProperty(TestConfigKeys.DRIVER_IMPLICITY_WAIT)), TimeUnit.SECONDS);
verify = new Verify(driver);
myAssert = new AssertUtils(driver);
driver.get(url);
}
@AfterMethod(alwaysRun = true)
public void tearDown()
{
if (WebdriverFactory.getTLDriver() != null) {
Log.endLog("AbstractTestCase: Test is ending");
WebdriverFactory.getTLDriver().quit();
}
}
}
Тесты запускаются, как и ожидалось, когдане работает параллельно.Проблема заключается в потерянных браузерах, которые приводят к сбою нескольких тестов при параллельной работе.
Пожалуйста, дайте мне знать, если я делаю что-то не так с приведенным выше кодом.Спасибо за помощь!