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?
3 Réponses :
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.
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.
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.
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é :)
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 >
textToBePresentInElement (élément WebElement, java.lang.String text)
: Une attente pour vérifier si le texte donné est présent dans le élément spécifié. textToBePresentInElementLocated (Par locator, java.lang.String text)
: Une attente pour vérifier si le texte donné est présent dans le élément qui correspond au localisateur donné. textToBePresentInElementValue (Par locator, java.lang.String text)
: Une attente pour vérifier si le texte donné est présent dans le attribut de valeur des éléments spécifiés. textToBePresentInElementValue (élément WebElement, java.lang.String text)
: Une attente pour vérifier si le texte donné est présent dans le attribut de valeur des éléments spécifiés. 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.
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 :)