Lorsque j'utilise "Input Text" pour saisir du texte dans la zone de texte, il se produira parfois une erreur?
Mais, je change juste le "Texte d'entrée" en "Appuyez sur les touches" cela fonctionnera normalement.
Remarque: XPATH est correct.
Sélénium doc:
Texte d'entrée-> Tapez le texte donné dans le champ de texte identifié par le localisateur.
Appuyez sur les touches-> Simule l'utilisateur qui appuie sur la ou les touches d'un élément ou du navigateur actif.
3 Réponses :
Texte d'entrée trouver l'élément sur DOM et envoyer votre texte tout en appuyant sur les touches pour effectuer des opérations au clavier
Vous obtenez une exception d'élément obsolète qui signifie que l'élément n'est pas prêt et saute dans une situation obsolète.Pour le résoudre, vous devez attendre que l'obsolescence se résolve à effectuer une action telle que rafraîchir, boucle avec plusieurs tentatives
Code JAVA qui peut attendre comme ci-dessous:
driver.navigate().refresh();
OU
vous pouvez également actualiser la page, essayez:
WebDriverWait wait = new WebDriverWait(driver, 60); wait.until(ExpectedConditions.stalenessOf(element)
utiliser refresh avant que l'élément lève l'exception de référence périmée
Modifiez la syntaxe du code selon vos besoins
la réponse ne justifie pas l'intention de la question et est totalement hors de propos, la question n'est pas liée à la liaison java, mais la réponse suggérée est en java
la réponse est pertinente car il obtient une exécution d'élément périmé, vérifiez son image d'erreur, oui le code est en java comme je l'ai déjà indiqué dans ma réponse, il est préférable de fournir une solution ou une référence correcte et OP peut faire un changement simple
s'il vous plaît InvalidElementStateException
son InvalidElementStateException
non StaleElementReferenceException
et les deux ont beaucoup de différence et donc le ans n'est pas un ajout pertinent, ce problème a été résolu par OP, maintenant OP a demandé quelle est la différence entre la façon dont l'un travaillait et pas l'autre
Dans quel état se trouve l'élément lorsque votre script échoue?
Vous pouvez essayer le mot clé Wait Until Element Is Enabled
. De plus, dans certains cas, vous devez cliquer sur l'élément pour le rendre modifiable.
Fondamentalement, ils sont presque identiques. Robot Framework utilise SeleniumLibrary qui encapsule le pilote Web avec les mots-clés "shell". Vous trouverez ci-dessous un extrait de code qui repère le code pertinent à partir de là:
def _input_text_into_text_field(self, locator, text, clear): element = self.find_element(locator) if is_truthy(clear): element.clear() element.send_keys(text) def _press_keys(self, locator, parsed_keys): if is_truthy(locator): element = self.find_element(locator) else: element = None for parsed_key in parsed_keys: actions = ActionChains(self.driver) special_keys = [] for key in parsed_key: if self._selenium_keys_has_attr(key.original): special_keys = self._press_keys_special_keys(actions, element, parsed_key, key, special_keys) else: self._press_keys_normal_keys(actions, element, key) for special_key in special_keys: self.info('Releasing special key %s.' % special_key.original) actions.key_up(special_key.converted) actions.perform() def _press_keys_normal_keys(self, actions, element, key): self.info('Sending key%s %s' % (plural_or_not(key.converted), key.converted)) if element: actions.send_keys_to_element(element, key.converted) else: actions.send_keys(key.converted) def _press_keys_special_keys(self, actions, element, parsed_key, key, special_keys): if len(parsed_key) == 1 and element: self.info('Pressing special key %s to element.' % key.original) actions.send_keys_to_element(element, key.converted) elif len(parsed_key) == 1 and not element: self.info('Pressing special key %s to browser.' % key.original) actions.send_keys(key.converted) else: self.info('Pressing special key %s down.' % key.original) actions.key_down(key.converted) special_keys.append(key) return special_keys
Donc, en d'autres termes, lorsque vous appelez Input Text
il essaie d'abord d'effacer le champ (contrairement à ce que vous appelez Press Keys
). Mais avec le Input Text
vous ne pourrez pas générer certains stokes clés tels que «Haut, Bas», etc.
Appuyez sur Touches, la possibilité d'envoyer des touches "spéciales" peut générer des événements contre des éléments qui ne peuvent pas être générés par le Input Text
. De tels événements peuvent être gérés d'une manière spéciale sur votre page en cours de test, de sorte que cette dernière méthode peut hypothétiquement étendre la couverture de vos tests (selon que ces événements sont réellement traités d'une manière particulière dans votre application).
Merci! Je vais essayer.
l'ajout d'une image / capture d'écran du code / erreur n'est pas une bonne pratique. veuillez l'ajouter dans le cadre de la question sous forme de texte / code.Veuillez également lire un exemple reproductible minimal et suivez la même pratique pour obtenir de bonnes réponses à la question