0
votes

Quelle est la différence entre "Saisir du texte" et "Appuyer sur les touches"?

Lorsque j'utilise "Input Text" pour saisir du texte dans la zone de texte, il se produira parfois une erreur?

entrez la description de l'image ici

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.


1 commentaires

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


3 Réponses :


0
votes

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


3 commentaires

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



0
votes

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.


0 commentaires

1
votes

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).


1 commentaires

Merci! Je vais essayer.