3
votes

Quelle est la condition ExpectedCondition équivalente de «Attendre que la page contienne» du cadre de robot en Java

Je sais qu'il existe des types d'attente en java

Attente implicite-

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)                            
        .withTimeout(30, TimeUnit.SECONDS)          
        .pollingEvery(5, TimeUnit.SECONDS)          
        .ignoring(NoSuchElementException.class);

Attente explicite-

WebDriverWait wait = new WebDriverWait(driver, explicitWaitSec);
        wait.until(ExpectedConditions.elementToBeClickable(element));

Attente fluide-

driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS)

, mais je ne sais pas laquelle des attentes et des conditions attendues me servira le plus proche du mot clé Attendre que la page contienne dans Robot Cadre?


0 commentaires

3 Réponses :


0
votes

Il y a comme plus de fonctions comme mais ces trois utilisent surtout ..

Attendre que l'élément soit activé suppose que l'élément existe sur la page, et attendra que l'élément soit activé (pas en lecture seule, ni désactivé). Si l'élément n'existe pas, il échouera immédiatement (ou après un délai si vous avez une attente implicite)

Attendre que l'élément soit visible suppose que l'élément existe sur la page et attendra que l'élément soit visible. Si l'élément n'existe pas, il échouera immédiatement (ou après un délai si vous avez une attente implicite)

Attendre que la page contienne l'élément ne fait aucune hypothèse sur l'élément. Il attend que l'élément soit réellement sur la page, qu'il soit visible, invisible, activé ou désactivé. Il ne nécessite pas d'attente implicite, car ce mot clé est une attente explicite.

La solution la plus complète consiste à attendre qu'il apparaisse sur la page, à attendre qu'il soit visible, puis à attendre qu'il soit activé.

Si l'élément sera toujours sur la page, vous pouvez ignorer la première vérification (c'est-à-dire s'il n'y a pas de javascript qui puisse créer ou supprimer l'élément).

Si l'élément sera toujours activé, vous n'avez pas besoin d'attendre qu'il devienne activé (c'est-à-dire: s'il n'y a pas de javascript pour désactiver ou activer l'élément)

Pour les pages statiques simples, il vous suffit de vérifier qu'un élément est visible. Même cela n'est généralement pas nécessaire car le sélénium ne revient pas de l'ouverture d'une page tant que la page n'est pas chargée. Le problème survient lorsque la page est dynamique. Autrement dit, quand il y a javascript qui peut changer ce qui est sur la page et s'il est visible ou activé, après le chargement du html.

Non, car "est chargé" peut avoir différentes significations dans différentes applications. Le navigateur définira la variable document.readyState sur " complete " quand il aura fini de charger le html. Vous pouvez vérifier cela dans le robot avec quelque chose comme Attendre la condition return window.document.readyState === 'complete' . Encore une fois, si vous avez javascript qui s'exécute sur la page, cela peut ne pas être suffisant car la page peut changer après le chargement du HTML initial.


3 commentaires

La question est de savoir comment faire Attendre que la page contient en Java. Cette réponse ne fournit que des alternatives à Robot Framework et, en tant que telle, ne correspond pas à ce qui est demandé.


L'explication n'est pas entièrement correcte - Attendre que l'élément soit * n'échouera pas immédiatement si l'élément n'est pas présent; au contraire, ils attendront d'abord que l'élément apparaisse dans le DOM, puis vérifieront leur condition spécifique.


@akshaypatil Je faisais référence à ces déclarations - "... suppose que l'élément existe sur la page ...". Ce n'est pas le cas - si l'élément n'est pas dans la page, les mots-clés n'échoueront pas directement, ils attendront qu'il apparaisse, puis effectueront les autres vérifications. Espérons que cela rend les choses plus claires.



3
votes

Il n'y a pas d'analogue direct, c'est une capacité développée explicitement dans Robot Framework.
En même temps, vous pouvez y parvenir avec les presenceOfElementLocated () avec une attente explicite / fluide (cette dernière est juste une version plus personnalisable du premier, btw).

Pour un localisateur, utilisez ce xpath:

//*[contains(., "Your Text Here")]

Voici ce que Robotf Framework en fait , c'est assez intelligent je dois l'admettre.


3 commentaires

Merci @Todor, pouvez-vous s'il vous plaît pointer (lien / URL) où vous pouvez regarder à l'intérieur de la méthode des frameworks de robot qui implémente cela


Bien sûr - github.com/robotframework/SeleniumLibrary/ blob / master / src /…


@Dev a mis à jour la réponse avec quelques détails supplémentaires sur la façon de répliquer; à votre santé :)



1
votes

Attendre que la page contienne

Attendre que la page contienne a> est l'implémentation pour attendre que le texte apparaisse dans le HTML DOM . Il est documenté comme suit:

@keyword
def wait_until_page_contains(self, text, timeout=None, error=None):
    """Waits until ``text`` appears on current page.
    Fails if ``timeout`` expires before the text appears. See
    the `Timeouts` section for more information about using timeouts
    and their default value.
    ``error`` can be used to override the default error message.
    """
    self._wait_until(lambda: self.is_text_present(text),
                     "Text '%s' did not appear in <TIMEOUT>." % text,
                     timeout, error)

Code source:

Keyword                     Arguments                           Documentation
-------                     ---------                           -------------
Wait Until Page Contains    text, timeout=None, error=None      Waits until text appears on current page.
                                                                Fails if timeout expires before the text appears. See the Timeouts section for more information about using timeouts and their default value.
                                                                error can be used to override the default error message.

Donc l'équivalent ExpectedConditions peut être l'une des suivantes: p >

Remarque : une différence significative est, tandis que wait_until_page_contains est relatif à la page actuelle , c'est-à-dire la Arbre DOM , les Conditions attendues sont basées sur WebElements sur le page actuelle qui rend vos Tests beaucoup plus précis.


3 commentaires

En plus de répéter ce qui se trouve dans les autres réponses - par ex. n'apportant rien de nouveau à la table, la réponse est incomplète / incorrecte - le mot-clé Attendre que la page contienne n'utilise pas de localisateurs, il recherche une chaîne dans le DOM complet . Tous ces mots-clés s'attendent à ce qu'un localisateur spécifique corresponde d'abord à un élément, puis vérifie son texte.


@DebanjanB merci, Pour avoir montré d'autres options possibles, qui peuvent s'aligner après presenceOfElementLocated () dans la liste des solutions possibles, +1


Hmm, le cas d'utilisation n'est toujours pas super clair pour moi. Cependant ma réponse est basée sur la condition Attendre que la page contienne qui est exclusivement basée sur le texte et IMO presenceOfElementLocated () n'est pas destinée à cette validation. Enfin, tout se résume à ce qui a fonctionné pour vous. Bonne chance :)