3

Je suis conscient que Thread.Sleep(); Donc, j'utilise la méthode Wait.Until (Expected.Conditions) pour dire au webdriver de selenium d'attendre qu'un élément satisfasse les désirs souhaités. condition.Wait.Until (conditions attendues) échoue parfois Selenium C#

Il semble que le problème est, Sélénium échoue parfois attendre assez pour un élément à afficher, cliquable, etc ...
Même si webDriverWait est setted attendre par exemple 15 secondes, Sélénium se précipite et à défaut, donc je ne reçois aucune erreur, mon test a passé le code, mais l'élément réel a été cliqué trop tôt pour répondre au clic. Y at-il une manière 100% fiable d'attendre qu'un élément soit cliquable sans erreurs?

CODE:

//This is how I instantiate WebDriverWait 
public static readonly WebDriverWait Wait = new WebDriverWait(Program.Driver, TimeSpan.FromSeconds(15)); 

//This is an example how I get and click on specific HTML element 
Wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//img[contains(@src, 'logo')]"))).Click(); 

Toute suggesstion, hypothèse serait appréciée!

+0

Ajouter un point d'arrêt avant le clic, exécutez le script, attendez l'élément/page être complètement chargé ... le clic fonctionne-t-il maintenant? Sinon, vous pouvez cliquer sur le mauvais élément. – JeffC

+0

C'est l'une des premières choses que j'ai faites avant de publier cette question. Tout fonctionne dans l'ordre, il attend juste assez maintenant. –

+1

À quoi ressemble l'élément HTML? Y a-t-il un script qui s'exécute après le chargement de la page qui le modifie d'une manière ou d'une autre? Peut-être que le code est en train de cliquer sur l'élément mais cet élément n'est pas celui qui répond à un clic ou peut-être qu'il est cliquable mais un script qui n'a pas fonctionné modifie son attribut onclick ou quelque chose ... la page. Votre code semble bon pour faire ce que vous demandez. Le sélénium identifie l'élément comme étant cliquable mais cliquer sur ce moment ne fournit clairement pas la réponse attendue. – JeffC

Répondre

0

Vous pouvez utiliser cette fonction n'attendez et trouver l'élément .... cela fonctionne pour moi toujours

public static void scrollToElement(final WebDriver webDriver, final Point location) 
{ 
    System.out.println("Scrolling to :" +location.x +"," +location.y); 
    final String sScript = "javascript:window.scrollBy("+location.x+","+location.y+")"; 
    final JavascriptExecutor js = (JavascriptExecutor) webDriver; 
    js.executeScript(sScript); 
}