Fermeture Du Navigateur Après L'Échec De Test
Je suis en cours d'exécution des tests avec WebDriver, lorsqu'un test échoue, le navigateur n'est pas à proximité. Sur une machine Windows, c'est un énorme problème parce que je puis avoir plusieurs instances de la IEDriver toujours en cours d'exécution en arrière-plan.
J'ai essayé une instruction try/catch qui ne semble pas fonctionner non plus. Si le test échoue, le navigateur reste ouvert. Toute aide serait grandement appréciée.
Le try catch déclaration ressemble à quelque chose comme ceci:
try
{
Assert.something(something something dark side);
driver.quit();
}
catch(Exception e)
{
System.out.println(e)
driver.quit();
}
Mon code complet est ci-dessous:
public class ClickAddMedication
{
Browser browser = new Browser();
public void addMedication(String driverName)
{
//Open Browser and navigate to page
WebDriver driver = browser.getDriver(driverName);
driver.manage().window().maximize();
driver.get("http://someIP:8080/hmp_patient/index.html");
//Click Add Medication button
WebElement addBtn = driver.findElement(By.id("add-btn"));
addBtn.click();
//Verify Add Medication page has loaded successfully
WebElement rxBtn = driver.findElement(By.className("icon-rx"));
WebElement otcBtn = driver.findElement(By.className("icon-otc"));
WebElement herbBtn = driver.findElement(By.className("icon-herb"));
Assert.assertEquals(true, rxBtn.isDisplayed());
Assert.assertEquals(true, otcBtn.isDisplayed());
Assert.assertEquals(true, herbBtn.isDisplayed());
driver.quit();
}
@Test(groups = {"functionalTests.FF"})
public void test_AddMedication_FF()
{
addMedication("firefox");
}
@Test(groups = {"functionalTests.iOS"})
public void test_AddMedication_iOS()
{
addMedication("iOS");
}
}
- Je exécuter les tests avec une testng.xml fichier et que vous souhaitez avoir à la fermeture du navigateur, indépendamment de si oui ou non le test passe.
Ci-dessous est mon Browser
classe:
public class Browser
{
public WebDriver getDriver(String driverName)
{
WebDriver driver = null;
if(driverName == "firefox")
{
driver = new FirefoxDriver();
}
else if(driverName == "chrome")
{
File chromeFile = new File ("C:/webdrivers/chromedriver.exe");
System.setProperty("webdriver.chrome.driver", chromeFile.getAbsolutePath());
driver = new ChromeDriver();
}
else if(driverName == "ie")
{
File ieFile = new File("C:/webdrivers/IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", ieFile.getAbsolutePath());
driver = new InternetExplorerDriver();
}
else if(driverName == "iOS")
{
try
{
driver = new RemoteWebDriver(new URL("http://localhost:3001/wd/hub"), DesiredCapabilities.ipad());
} catch (MalformedURLException e)
{
e.printStackTrace();
}
}
return driver;
}
}
Mince, je pensais que j'avais.
OriginalL'auteur DarthOpto | 2012-12-21
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas mentionné ce cadre, vous êtes en utilisant pour l'exécution de vos tests, mais une façon de gérer ce qui serait d'utiliser l'équivalent d'un "après" essai d'annotation pour accomplir cette tâche. JUnit appelle cette annotation
@After
tout TestNG appelle@AfterMethod
. La méthode annotée avec les après test annotation sera exécuté après chaque méthode annotée avec@Test
, indépendamment de la réussite/l'échec de l'état du test. Si vous vous attendez à utiliser la même instance de pilote à travers des méthodes d'essai, la plupart des tests de coureurs ont un@AfterClass
annotation ou similaire, qui sera exécuté à la fin de tous les@Test
méthodes dans la classe.Comme un exemple, vous voulez faire quelque chose comme ce qui suit (notez la promotion de la
driver
variable à une variable membre de la classe):J'ai mis la suivante après mon
@Test
méthodes et le navigateur n'a toujours pas close. C'est Java avec TestNG.@AfterTest public void closeDriver(String driverName) { WebDriver driver = browser.getDriver(driverName); driver.quit(); }
Ci-dessus, même si le test passe le
driver.quit()
ne fonctionne pas.Vous aurez besoin de fournir plus de code pour avoir une réponse précise, ensuite. Vous devrez montrer une classe entière, avec le
@Test
et@AfterTest
méthodes, ainsi que de donner des informations sur ce quebrowser.getDriver()
. Par exemple, sibrowser.getDriver(driverName);
démarre une nouvelle instance du navigateur, puis, bien sûr, il ne fonctionnera pas dans votre@AfterTest
méthode.Merci pour votre aide, j'ai édité ma question pour avoir un test complet.
OriginalL'auteur JimEvans
Si vous êtes à l'aide de Ruby et de l'Unité de Test, vous pourriez avoir quelque chose comme ça -
si vous partagez le wedriver session de navigateur pour les tests multiples, et la nécessité de fermer le navigateur seulement à la fin
ou si vous souhaitez fermer votre navigateur après chaque test individuel
OriginalL'auteur Amey
Cela peut ne pas être l'apt de la solution, mais j'ai fait ceci comme solution de contournement pour le problème.
au lieu de
Try{}catch
... utiliserthrows
:throws java.lang.AssertionError
et de fermer le navigateur dans le bloc catch, e.g:OriginalL'auteur Ravi
pilote.close() devrait faire l'affaire pour vous. Ou l'établissement d'un indicateur booléen et quand le test échoue, le drapeau booléen est définie sur true.
Puis à l'aide du pilote.close() ou d'un Système.exit(1) devrait fonctionner !!
Laissez-moi savoir si vous avez de la difficulté avec la solution de contournement ci-dessus.
OriginalL'auteur javageek