Здравствуйте. Помогите пожалуйста решить проблему. При запуске сьюта через TestNG , драйвер вызывается заново для каждого класса. А должен вызыватся один и передаватся. При запуске сьюта через Eclipse все работает отлично.
Запуск браузера по примеру Баранцева (http://selenium2.ru/articles/66-how-to-start-browser-with-driver-factory.html)
public class WebDriverFactory
{
// Factory settings
private static String defaultHub = null;
private static int restartFrequency = Integer.MAX_VALUE;
public static void setDefaultHub(String newDefaultHub)
{
defaultHub = newDefaultHub;
}
public static void setRestartFrequency(int newRestartFrequency)
{
restartFrequency = newRestartFrequency;
}
// Factory
private static String key = null;
private static int count = 0;
private static WebDriver driver;
private static WebDriverEventListener eventListener;
public static WebDriver getDriver(String hub, Capabilities capabilities)
{
count++;
// 1. WebDriver instance is not created yet
if (driver == null) {
return newWebDriver(hub, capabilities);
}
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// 2. Different flavour of WebDriver is required
String newKey = capabilities.toString() + ":" + hub;
if (!newKey.equals(key)) {
dismissDriver();
key = newKey;
return newWebDriver(hub, capabilities);
}
// 3. Browser is dead
try {
System.out.println(driver.getCurrentUrl());
driver.getCurrentUrl();
} catch (Throwable t) {
t.printStackTrace();
return newWebDriver(hub, capabilities);
}
// 4. It's time to restart
if (count >= restartFrequency) {
dismissDriver();
return newWebDriver(hub, capabilities);
}
// 5. Just use existing WebDriver instance
return driver;
}
public static WebDriver getDriver(Capabilities capabilities) {
return getDriver(defaultHub, capabilities);
}
public static void dismissDriver() {
if (driver != null) {
try {
System.out.println("quit()");
driver.quit();
driver = null;
key = null;
} catch (WebDriverException ex) {
// it can already be dead or unreachable
}
}
}
// Factory internals
private static WebDriver newWebDriver(String hub, Capabilities capabilities)
{
driver = (hub == null)
? createLocalDriver(capabilities)
: createRemoteDriver(hub, capabilities);
key = capabilities.toString() + ":" + hub;
count = 0;
return driver;
}
private static WebDriver createRemoteDriver(String hub,
Capabilities capabilities) {
try {
return new RemoteWebDriver(new URL(hub), capabilities);
} catch (MalformedURLException e) {
e.printStackTrace();
throw new Error("Could not connect to WebDriver hub", e);
}
}
private static WebDriver createLocalDriver(Capabilities capabilities)
{
String browserType = capabilities.getBrowserName();
if (browserType.equals("firefox"))
return new FirefoxDriver(capabilities);
if (browserType.startsWith("internet explorer"))
return new InternetExplorerDriver(capabilities);
if (browserType.equals("chrome"))
return new ChromeDriver(capabilities);
if (browserType.equals("opera"))
return new OperaDriver(capabilities);
throw new Error("Unrecognized browser type: " + browserType);
}
static {
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run() {
dismissDriver();
}
});
}
}
Сами классы по принципу :
public class ChatTest
{
WebDriver driver;
@BeforeMethod
public void setup()
{
driver = WebDriverFactory.getDriver(DesiredCapabilities.firefox());
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@AfterMethod (alwaysRun = true)
public void unLogin()
{
MyPage my = PageFactory.initElements(driver, MyPage.class);
my.exit();
}
@Test
public void SendMessage()
{ тело теста }
TestNG.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test verbose="5" name="test.java">
<packages>
<package name="test.java"/>
</packages>
</test>
</suite>