Sélénium n’attend pas que l’élément soit cliquable

J’ai une page qui est chargée dynamicment et contient un bouton. J’essaie d’attendre que le bouton soit disponible pour qu’il soit cliqué avec selenium à l’aide des liaisons C #. J’ai le code suivant:

WebDriverWait wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(30)); wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("addInspectionButton"))); var button = Driver.Instance.FindElement(By.Id("addInspectionButton")); button.Click(); 

cela ne fonctionne pas bien. L’événement clic n’est jamais déclenché. Le script selenium ne déclenche pas d’exception pour alerter que l’élément avec l’ID “addInspectionButton” n’existe pas. Il est tout simplement impossible de cliquer dessus. Si j’ajoute un Thread.Sleep (3000) entre l’instruction wait et la ligne où je reçois un descripteur sur l’élément button, cela fonctionne.

Est-ce que je n’utilise pas correctement ExpectedConditions.ElementToBeClickable ici?

    Il s’avère qu’un événement était lié au bouton après son ajout dynamic à la page. Donc, on cliquait sur le bouton mais rien ne se passait. Le thread de sumil inséré dans le code donnait simplement au temps de l’événement lié au client d’être lié.

    Ma solution consistait à cliquer sur le bouton, à vérifier le résultat attendu, puis à répéter si le résultat attendu n’était pas encore dans le DOM.

    Comme le résultat attendu était un formulaire à ouvrir, j’ai interrogé le DOM comme suit:

     button.Click();//click button to make form open var forms = Driver.Instance.FindElements(By.Id("inspectionDetailsForm"));//query the DOM for the form var times = 0;//keep tabs on how many times button has been clicked while(forms.Count < 1 && times < 100)//if the form hasn't loaded yet reclick the button and check for the form in the DOM, only try 100 times { button.Click();//reclick the button forms = Driver.Instance.FindElements(By.Id("inspectionDetailsForm"));//requery the DOM for the form times++;// keep track of times clicked }