1
votes

Le sélénium attend d'être cliquable mais toujours pas cliquable

J'écris un programme utilisant Selenium en Java pour gratter un site Web (je partagerais le site Web, mais vous avez besoin d'un compte donc je ne pense pas que ce serait utile). J'utilise le pilote chrome. Je n'arrive pas à essayer de comprendre comment cliquer sur le bouton "Exécuter maintenant" sur une page (extrait de code html ci-dessous). Selenium se plaint que le bouton ne soit pas cliquable même si je fais une attente explicite jusqu'à ce que le bouton soit cliquable.

Voici mon code:

<div class="mdl-body">
    <div class="onboarding-report-section">
        Reduce the time it takes to setup and run a report.
        <a href="#" class="_onboarding-report-setup-details">Click here to learn more</a>
    </div>
    
    <h1>24 Hour Summary Report</h1>
    <div class="_form"><div class="_widget-root mdl-form">
        
            <div class="_widget-section mdl-form-section">
                <div class="_widget-fields"><div class="_form-field-save_config mdl-field saveConfigurationComponent">
        <div class="mdl-field-input">
            <div class="mdl-form-label flex-label">My saved settings</div>
            <div class="_publishOverlayPlaceholder"></div>
            <div class="_component-dropdown flex-dropdown"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:300px;">
        <span class="dropdown-legend"></span>
        <span class="dropdown-label">
            
                    
                        
                            Unsaved
                            
                        
                    
                    
                    
            
        </span>
        <i class="material-icons dropdown-arrow">arrow_drop_down</i>
    </span></div>
            <div class="flex-actions">
                <button class="_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary" data-upgraded=",MaterialButton,MaterialRipple">Run now<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
                <!--<button class="_component-save mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="display:none">Save</button>-->
                <button class="_component-saveAs mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="" data-upgraded=",MaterialButton,MaterialRipple">Save As<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
                <!--<button class="_component-delete mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" disabled>Delete</button>-->

                <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary configMenuBtn" id="demo-menu-lower-right" data-upgraded=",MaterialButton,MaterialRipple">
                    More Actions <i class="material-icons configMenuList">arrow_drop_down</i>
                <span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
                <div class="mdl-menu__container is-upgraded"><div class="mdl-menu__outline mdl-menu--bottom-right"></div><ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events" for="demo-menu-lower-right" data-upgraded=",MaterialMenu,MaterialRipple">
                    
                    <li class="mdl-menu__item _component-save mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple" style="display: none;">Save<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
                    <li disabled="disabled" class="mdl-menu__item _component-delete mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple">Delete<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
                </ul></div>
            </div>
        </div>
        <div class="_setting-instructions"></div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div></div>
            </div>
        
            <div class="_widget-section mdl-form-section">
                <div class="_widget-fields"><div class="_form-field-dateEnding mdl-field">
        <div class="mdl-field-input datePickerComponent unSavedConfigField">
            <div class="mdl-field-header">
                <div class="mdl-form-label">Date (Ending)<span class="unSavedConfiglabelDisplay">(Date (Ending) won't be saved in the setting)</span></div>
                
             </div>
            <span class="_toggleRange" style="display: none;">From </span>
            <input class="_fromDate catalyst-datepicker" style="margin-right:25px;">
            <span class="_toggleRange" style="display: none;">
                To <input class="_toDate catalyst-datepicker">
            <input type="hidden" value="2020-07-10" name="end_date"></span>
        <input type="hidden" value="2020-07-10" name="start_date"></div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div><div class="_form-field-unit mdl-field">
        <div class="mdl-field-input genericComponent">
         <div class="mdl-field-header">
            <div class="mdl-form-label">Unit</div>
            
         </div>
            
            <div class="_dropdown"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:315px;">
        <span class="dropdown-legend"></span>
        <span class="dropdown-label">
            
                    
                        
                            All
                            
                        
                    
                    
                    
            
        </span>
        <i class="material-icons dropdown-arrow">arrow_drop_down</i>
    </span></div>
        </div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div><div class="_form-field-floor mdl-field">
        <div class="mdl-field-input genericComponent">
         <div class="mdl-field-header">
            <div class="mdl-form-label">Floor</div>
            
         </div>
            
            <div class="_dropdown"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:315px;">
        <span class="dropdown-legend"></span>
        <span class="dropdown-label">
            
                    
                        
                            All
                            
                        
                    
                    
                    
            
        </span>
        <i class="material-icons dropdown-arrow">arrow_drop_down</i>
    </span></div>
        </div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div><div class="_form-field-timeEnding mdl-field">
        <div class="mdl-field-input hourMinuteTimeComponent">
            <div class="mdl-field-header">
                <div class="mdl-form-label">Ending Time</div>
            </div>
            <div class="_nestedContent">
                <div class="_nestedHours"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:50px;">
        <span class="dropdown-legend"></span>
        <span class="dropdown-label">
            
                    
                        
                            13
                            
                        
                    
                    
                    
            
        </span>
        <i class="material-icons dropdown-arrow">arrow_drop_down</i>
    </span></div>
                <div class="_nestedMinutes"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:50px;">
        <span class="dropdown-legend"></span>
        <span class="dropdown-label">
            
                    
                        
                            00
                            
                        
                    
                    
                    
            
        </span>
        <i class="material-icons dropdown-arrow">arrow_drop_down</i>
    </span></div>
            </div>
        </div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div><div class="_form-field-summaryInterval mdl-field">
        <div class="catalyst-field-input">
            <div class="mdl-field-header">
                <div class="mdl-form-label">Summary Interval</div>
                
            </div>
            
            

            

            

            
                
                    
                        
                            <label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_summaryInterval_8" data-upgraded=",MaterialRadio,MaterialRipple">
        <input type="radio" class="mdl-radio__button" id="formObj_summaryInterval_8" name="summaryInterval" value="8">
        <span class="mdl-radio__label">Last 8 hours</span>
    <span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
                        
                    
                        
                            <label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded is-checked" for="formObj_summaryInterval_24" data-upgraded=",MaterialRadio,MaterialRipple">
        <input type="radio" class="mdl-radio__button" id="formObj_summaryInterval_24" name="summaryInterval" value="24">
        <span class="mdl-radio__label">Last 24 hours</span>
    <span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
                        
                    
                        
                            <label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_summaryInterval_72" data-upgraded=",MaterialRadio,MaterialRipple">
        <input type="radio" class="mdl-radio__button" id="formObj_summaryInterval_72" name="summaryInterval" value="72">
        <span class="mdl-radio__label">Last 72 hours</span>
    <span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
                        
                    
                
            

        </div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div><div class="_form-field-includeDraftProgressNotes mdl-field">
        <div class="catalyst-field-input">
            <div class="mdl-field-header">
                <div class="mdl-form-label">Include draft progress notes on report</div>
                
            </div>
            
            

            

            

            
                
                    
                        
                            <label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded is-checked" for="formObj_includeDraftProgressNotes_true" data-upgraded=",MaterialRadio,MaterialRipple">
        <input type="radio" class="mdl-radio__button" id="formObj_includeDraftProgressNotes_true" name="includeDraftProgressNotes" value="true">
        <span class="mdl-radio__label">Yes</span>
    <span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
                        
                    
                        
                            <label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_includeDraftProgressNotes_false" data-upgraded=",MaterialRadio,MaterialRipple">
        <input type="radio" class="mdl-radio__button" id="formObj_includeDraftProgressNotes_false" name="includeDraftProgressNotes" value="false">
        <span class="mdl-radio__label">No</span>
    <span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
                        
                    
                
            

        </div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div><div class="_form-field-sortBy mdl-field">
        <div class="catalyst-field-input">
            <div class="mdl-field-header">
                <div class="mdl-form-label">Sort Residents By</div>
                
            </div>
            
            

            

            

            
                
                    
                        
                            <label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_sortBy_-1" data-upgraded=",MaterialRadio,MaterialRipple">
        <input type="radio" class="mdl-radio__button" id="formObj_sortBy_-1" name="sortBy" value="-1">
        <span class="mdl-radio__label">Last Name</span>
    <span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
                        
                    
                        
                            <label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded is-checked" for="formObj_sortBy_1" data-upgraded=",MaterialRadio,MaterialRipple">
        <input type="radio" class="mdl-radio__button" id="formObj_sortBy_1" name="sortBy" value="1">
        <span class="mdl-radio__label">Location</span>
    <span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
                        
                    
                
            

        </div>
        <div class="_component-field-error mdl-field-errors"></div>
    </div></div>
            </div>
        
    </div></div>
    <div class="_meadcoSection"></div>

</div>

Mon xpath monte jusqu'à puisque l'instruction du journal dit quelque chose avec un cliqué. Si je supprime le span du xpath, rien ne change.

Voici le journal:

<div class="flex-actions">
                <button class="_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary" data-upgraded=",MaterialButton,MaterialRipple">Run now<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
                <!--<button class="_component-save mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="display:none">Save</button>-->
                <button class="_component-saveAs mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="" data-upgraded=",MaterialButton,MaterialRipple">Save As<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
                <!--<button class="_component-delete mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" disabled>Delete</button>-->

                <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary configMenuBtn" id="demo-menu-lower-right" data-upgraded=",MaterialButton,MaterialRipple">
                    More Actions <i class="material-icons configMenuList">arrow_drop_down</i>
                <span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
                <div class="mdl-menu__container is-upgraded"><div class="mdl-menu__outline mdl-menu--bottom-right"></div><ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events" for="demo-menu-lower-right" data-upgraded=",MaterialMenu,MaterialRipple">
                    
                    <li class="mdl-menu__item _component-save mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple" style="display: none;">Save<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
                    <li disabled="disabled" class="mdl-menu__item _component-delete mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple">Delete<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
                </ul></div>
            </div>

Voici le html code pour le bouton:

Starting ChromeDriver 83.0.4103.39 (ccbf011cb2d2b19b506d844400483861342c20cd-refs/branch-heads/4103@{#416}) on port 41202
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Jul 10, 2020 5:36:00 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Exception in thread "main" org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <span class="mdl-button__ripple-container">...</span> is not 
clickable at point (796, 183). Other element would receive the click: <span class="mdl-button__ripple-container">...</span>
  (Session info: chrome=83.0.4103.116)
Build info: version: '4.0.0-alpha-6', revision: '5f43a29cfc'
System info: host: '______', ip: '_______', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.7'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 83.0.4103.116, chrome: {chromedriverVersion: 83.0.4103.39 (ccbf011cb2d2b..., userDataDir: C:\Users\______\AppData\Loca...}, goog:chromeOptions: {debuggerAddress: localhost:56109}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
Session ID: e2b8ff1a23cd9b0932c00af2b1ffd2b5
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
        at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:196)
        at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:129)
        at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:53)
        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:160)
        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:582)
        at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:316)
        at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:85)
        at reliant.abusescanner.PCCclient.getReport(PCCclient.java:114)
        at reliant.abusescanner.Main.main(Main.java:72)

Voici un segment beaucoup plus large du code html (qui inclut ce qui précède), au cas où cela vous aiderait à répondre à la question: p >

public String getReport() {
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='QTF_AdminTab']/a")));
    driver.get("theurl");
    wait.until(ExpectedConditions.urlToBe("theurl"));

    String oldtab = driver.getWindowHandle();
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div[1]/div[2]/div/div[1]/div/div/div[1]/div[4]/button[@class='_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']/span")));
    driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/div[1]/div/div/div[1]/div[4]/button[@class='_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']/span")).click();
    //... I don't think the rest is relevant since the above line (line 114 in the log) is the one causing the trouble 
}

Veuillez me faire savoir si je peux faire quelque chose pour faciliter la réponse à cette question. Merci d'avance!

Edit: J'ai censuré certaines informations personnelles (avec "____"). J'espère que tout va bien


1 commentaires

Notez également que je n'utilise nulle part d'attentes implicites


3 Réponses :


0
votes

Les attentes peuvent être délicates, juste pour dépanner, utilisez thread.sleep (15000) et voyez si l'élément est cliquable. le moment où j'ai eu une erreur similaire - Un autre élément recevrait le clic:, cela signifiait que la page était toujours en cours de chargement, j'ai résolu mon problème en implémentant ces deux méthodes en fonction de ce problème, cependant, j'ai toujours pu cliquer sur l'élément sans celles-ci méthodes personnalisées en utilisant thread.sleep (15000) donc je suggérerais d'essayer d'abord pour identifier le problème, voici à quoi ressemblait ma méthode wait,

public void isDisplayed (élément WebElement) { essayez {

public void elementwaitClick(WebElement waitForelement) {

    WebDriverWait wait = new WebDriverWait(driver, 30);
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(waitForelement));
    element.click();

// deuxième méthode

        WebDriverWait wait = new WebDriverWait(driver, 90);

        List<WebElement> cccc = driver.findElements(By.xpath("//div[contains(@id,'loadmask')]"));

        boolean pageload = wait.until(ExpectedConditions.invisibilityOfAllElements(cccc));

        // boolean pageload=
        // wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[contains(@id,'loadmask-')]")));

        System.out.println(a);
        if (pageload) {
            wait.until(ExpectedConditions.elementToBeClickable(element));
        }

    } catch (org.openqa.selenium.NoSuchElementException exception) {

    }
}


2 commentaires

Vous avez raison, j'aurais dû mentionner que si je le fais dormir pendant 10 secondes avant d'essayer de cliquer, cela fonctionne. Je ne voulais tout simplement pas utiliser un sommeil manuel car ce n'est pas une solution idéale. Pourriez-vous expliquer ce que fait votre première méthode?


Bonjour, je n'ai peut-être pas été clair en demandant mon suivi. Pour être précis, pourriez-vous expliquer ce que "// div [contient (@ id, 'loadmask')]" signifie / correspond et pourquoi vous attendez l'invisibilité de tous les éléments?



1
votes

Si vous regardez la méthode elementToBeClickable (..) , vous verrez que «cliquable» signifie «visible et activé».

Le message que vous pouvez voir signifie que certains éléments chevauchent votre cible . Changer votre XPath n'aidera pas.

Cela se produit souvent parce que la mise en page de l'application est conçue pour être affichée dans une certaine résolution d'écran mais que les tests sont exécutés avec une résolution plus petite de sorte que les éléments se croisent. P >

PS - wait.until (..) renvoie l'élément qui a été localisé par la condition afin qu'il ne soit pas nécessaire de le rechercher à nouveau. Vous pouvez faire quelque chose comme:

WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/blah blah"));


7 commentaires

Intéressant. Alors, que dois-je faire pour résoudre ce problème?


Essayez tout d'abord de maximiser votre fenêtre avant le début du test. Comme driver.manage (). Window (). Maximiser ();


Malheureusement, cela n'a pas fonctionné - la même chose s'est produite, le programme s'est toujours écrasé. J'aurais probablement dû mentionner que si je mets le programme en veille pendant 10 secondes avant d'essayer le "wait-until-clickable", cela fonctionne, alors peut-être que le problème est que la page n'est pas chargée?


Il y a probablement la superposition qui couvre votre bouton pendant qu'un processus de chargement est en cours. Comme une animation de serveur ou plus. Essayez de vérifier comment vous changez lorsque vous effectuez manuellement les étapes. Et puis attendez que cet élément de couverture disparaisse.


Salut, pourriez-vous savoir comment je pourrais faire ça? Je ne sais pas vraiment comment vérifier comment le dom change. Je pense que votre théorie est juste, cependant, parce que lorsque la page se charge pour la première fois, il y a deux boutons l'un sur l'autre, puis mon bouton se sépare.


Etait-ce le cas?


Oui c'était! Merci beaucoup! Fondamentalement, il y avait trois boutons, mais seulement deux démarrent visibles (le premier bouton commence au-dessus des seconds boutons). Le 2ème bouton devient visible plus tard, alors je l'ai juste fait attendre que le second bouton devienne visible et puis ça a fonctionné comme par magie! Aussi, j'ai mis ce commentaire ici car je pense que résumer ce que j'ai fait pour que cela fonctionne enfin pourrait être utile aux autres



1
votes

La méthode prend un élément Web comme paramètre.

List cccc = driver.findElements (By.xpath ("// div [contains (@ id, 'loadmask')]"));

Cela vérifie si le chargement de certains éléments JavaScript WebElement est terminé. Il stocke tous les éléments qui, selon l'erreur, recevraient le clic dans mon cas, le message contenait quelque chose avec loadmask. Dans votre il sera autour de

if (pageload) {
            wait.until(ExpectedConditions.elementToBeClickable(element));
        }

Vérifie si l'élément de liste cccc est invisible p>

boolean pageload = wait.until(ExpectedConditions.invisibilityOfAllElements(cccc));

// Si l'élément n'est pas visible, il attend que l'élément fourni dans le paramètre soit cliquable

Quelques étapes de dépannage;

Vous pouvez suspendre votre dom (Google it) avant que votre élément ne soit cliqué et voir ce qui se passe dans votre cas spécifique. Dans mon cas, le coupable était ce masque de chargement d'élément qui était un JS chargé, ce qui provoquait l'échec de mon test. Je suis donc entré et j'ai mis le dom en pause juste avant mon clic réel et j'ai vu ce qui se passait. Vous pouvez essayer ceci et voir si cela aide.

Votre cas n'est peut-être pas le même que le mien, mais si vous vous référez ici, il existe des tonnes de façons de mettre en œuvre les conditions attendues

https: // www. selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html


0 commentaires