I have written some selenium code to test a web application using Testng + webdriver. I have a hub and one node where I rune firefox+chrome and an android tablet where I run android tests.
I can run android tests one by one but when I run as a part of testng suite I am facing the following problem :
the android browser is not closing after each test even though I am calling driver.quit() in @aftertest annotation.
Here in one of my tests :
public class LanguageCheckEN {
WebDriver driverEN, driverFR;
String BaseURL, winURL, TestURL, andURL;
@BeforeTest
@Parameters({ "browser" })
public void setup(String browser) throws IOException
{
File file = new File("config.properties");
FileInputStream fileInput = new FileInputStream(file);
Properties properties = new Properties();
properties.load(fileInput);
fileInput.close();
TestURL = properties.getProperty("AppURL");
BaseURL = properties.getProperty("HubURL");
winURL = properties.getProperty("WinURL");
andURL = properties.getProperty("AndURL");
DesiredCapabilities capability = null;
if (browser.equalsIgnoreCase("firefox")) {
System.out.println("firefox");
capability = DesiredCapabilities.firefox();
capability.setBrowserName("firefox");
capability.setPlatform(Platform.WINDOWS);
// capability.setVersion("");
driverEN = new RemoteWebDriver(new URL(winURL), capability);
}
if (browser.equalsIgnoreCase("chrome")) {
System.out.println("chrome");
capability = DesiredCapabilities.chrome();
capability.setBrowserName("chrome");
capability.setPlatform(Platform.WINDOWS);
driverEN = new RemoteWebDriver(new URL(winURL), capability);
// capability.setVersion("");
}
if (browser.equalsIgnoreCase("android")) {
System.out.println("android");
capability = DesiredCapabilities.android();
capability.setBrowserName("android");
capability.setPlatform(Platform.ANDROID);
driverEN = new RemoteWebDriver(new URL(andURL), capability);
// capability.setVersion("");
}
}
@Test
private void checkLanguageEN() {
driverEN.get(TestURL);
WebElement input1 = driverEN
.findElement(By.id("login_form_user_input"));
input1.sendKeys("guest");
WebElement input2 = driverEN.findElement(By
.id("login_form_password_input"));
input2.sendKeys("guest");
WebElement btn = driverEN
.findElement(By.id("login_form_signin_button"));
btn.click();
WebElement img = driverEN.findElement(By.id("header_language_button"));
String lng = img.getText();
if (lng.equals("en"))
{
WebDriverWait wait = new WebDriverWait(driverEN, 20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
.linkText("Calendar Search")));
}
else
{
img.click();
WebDriverWait wait = new WebDriverWait(driverEN, 20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
.linkText("Calendar Search")));
}
}
@AfterTest
private void quitTest() {
driverEN.close();
}
public void aftertest()
{
quitTest();
}
}
Here is also my testng.xml file :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Dollar Universe Explorer E2E Testing" thread-count="3" parallel="tests" >
<test name="Language English Chrome">
<parameter name="browser" value="chrome" />
<classes>
<class name="basicWebElements.LanguageCheckEN" />
</classes>
</test>
<test name="Language English firefox">
<parameter name="browser" value="firefox" />
<classes>
<class name="basicWebElements.LanguageCheckEN" />
</classes>
</test>
<test name="Language English android">
<parameter name="browser" value="android" />
<classes>
<class name="basicWebElements.LanguageCheckEN" />
</classes>
</test>
</suite>
Because of this issue when I run the whole suite i get this error :
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Thanks for your help.
Here the answer :
havent disconnected from it
is needed in onDestroy to make it stop complaining