Jeu de selenium webdriver par défaut de la vitesse d'exécution
Je suis de l'exécution de certains tests IHM avec webdriver. J'ai exporté quelques tests directement à partir de selenium IDE. Dans ce test, j'ai eu de baisse de l'IDE de la vitesse de l'exécuter en raison du chargement d'une liste déroulante. Comment puis-je ralentir mon test Selenium webdriver? J'ai déjà mis
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
et il a continué de tourner à une vitesse rapide. Je sais que l'option de mise en veille, mais ce n'est pas ce que je recherche, je voudrais changer le webdriver par défaut de la vitesse d'exécution. Voici mon code:
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class ProfileCheck {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private final StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://localhost:8080";
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
}
@Test
public void testProfileCheck() throws Exception {
System.out.println("Test if profiles have access to the screen");
//Administrateur (has access)
driver.get(baseUrl + "/Dashboard/index.jsp?lang=en");
driver.findElement(By.cssSelector("input[name=combo_profile]")).click();
driver.findElement(
By.cssSelector(".x-boundlist-item:contains('Administrateur')"))
.click();
driver.get(baseUrl + "/Params/ClientCutOff/index.jsp?lang=en");
try {
assertTrue(driver.getTitle().matches("^[\\s\\S]*ClientCutOff$"));
} catch (Error e) {
verificationErrors.append(e.toString());
}
//Habilitation (no access)
driver.get(baseUrl + "/Dashboard/index.jsp?lang=en");
driver.findElement(By.cssSelector("input[name=combo_profile]")).click();
driver.findElement(
By.cssSelector(".x-boundlist-item:contains('Habilitation')"))
.click();
driver.get(baseUrl + "/Params/ClientCutOff/index.jsp?lang=en");
try {
assertFalse(driver.getTitle().matches("^[\\s\\S]*ClientCutOff$"));
} catch (Error e) {
verificationErrors.append(e.toString());
}
}
@After
public void tearDown() throws Exception {
try {
Thread.sleep(5000);
driver.quit();
} catch (Exception e) {
}
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
Lire quelques réponses et aucun aidé
La diminution de la vitesse de Selenium Webdriver
Selenium IDE par défaut Défini en vitesse lente
OriginalL'auteur Manuel Faria | 2015-08-18
Vous devez vous connecter pour publier un commentaire.
Ne pas utiliser
sleep
!!!OriginalL'auteur Ran Adler
Il était une fois un "setSpeed()" méthode de Java liaisons de Selenium WebDriver. Mais il était déconseillé, car il n'a pas de sens concernant le navigateur de l'automatisation.
Au lieu de cela, si le pilote est "plus rapide" que le chargement de vos éléments ou qqch de similaire, vous devez toujours faire utilisation intelligente de attend pour gérer ces cas.
Pour résumer, il y a actuellement aucune option délibérément ralentir l'exécution de dans WebDriver lui-même. il n'y a pas d'autre moyen actuellement explicitement ralentir les étapes de la vôtre autre que de mettre en œuvre Fil.sleep()
MAIS il ya quelques autres options que vous pourriez explorer:
Par exemple, vous pouvez écrire votre propre méthode pour cliquer sur les éléments si vous voulez ralentir en cliquant sur les éléments:
si vous voulais ralentissement de la findElement méthode que vous pourriez écrire une autre méthode d'assistance:
Vous pouvez même écrire votre propre classe étendue de l'un des WebDriver classes, comme il est décrit ici comme ceci:
Vous pourriez écrire ces méthodes pour toutes les exécutions, que vous voulez ralentir.
OriginalL'auteur drkthng
Dans des circonstances normales, quand il regarde pour un élément, le Sélénium continue d'essayer de trouver un élément pour aussi longtemps que vous avez défini la valeur de "implicitement attendre". Cela signifie que si l'élément est trouvé plus tôt que cela, elle poursuivra l'exécution du test. Je ne suis pas un expert en Java, mais dans le code que vous fournissez, je ne peux pas identifier tous les bits qui sont à la recherche d'un élément liste déroulante. Depuis un menu déroulant peut être chargé à long avant que les véritables éléments à l'intérieur sont chargés, je parie que c'est là que réside le problème: il est à la recherche de la liste déroulante lui-même, conclut-il, cesse d'attendre et commence à essayer d'exécuter le reste du test, qui échoue parce que les éléments n'étaient pas encore chargé. La solution serait donc de chercher l'élément spécifique que vous essayez de sélectionner. Malheureusement, je ne suis pas bien versé suffisamment en Java afin de vous fournir le code de la solution.
En aparté, dans mon expérience lors de l'exportation de Selenium IDE à quelque chose d'autre, vous vous retrouvez avec des tests qui sont presque, mais pas tout à fait, entièrement, contrairement à ce que vous attendez. Ils pourrait faire ce que vous attendez d'eux, mais ils l'habitude de prendre des raccourcis ou, au moins, une approche différente de celle que vous feriez si vous étiez pour code la tests vous-même.
Oui, c'était en partie mon point de vue. Dans mon expérience, il est beaucoup plus efficace sur le long terme (ou même dans la "moyenne") pour apprendre à construire vos tests à l'aide d'un script ou de programmation de langue qui peuvent interagir avec le Sélénium directement, c'est-à-bricolons avec les conversions à partir de l'IDE qui ont la confusion des comportements.
OriginalL'auteur Cronax