0
votes

Comment cliquer sur un WebElement en utilisant JavaScript en utilisant RobotFramework SeleniumLibrary en Python?

J'essaye de cliquer sur un WebElement en utilisant JavaScript mais je ne parviens pas à créer une déclaration JavaScript pour cela.

Je peux cliquer sur un bouton Annuler en utilisant cette déclaration

JavascriptException: Message: javascript error: missing ) after argument list

Mais en cliquant sur un autre élément qui est plus compliqué, je ' J'essaye ceci

expand_xpath = "//span[text()='Submit']//ancestor::table//a[text()='Expand']"
driver.execute_javascript("document.evaluate('${expand_xpath}', document.body, null, 9, null).singleNodeValue.click()")

JavascriptException: Message: erreur javascript: document.getElementByXpath n'est pas une fonction

Ce expand_xpath stocke xpath du WebElement sur lequel je dois cliquer mais je ne peux pas encadrer le code JS pour cliquer sur cet élément.

Veuillez trouver le RobotFramework Execute Javascript strong > expnation des mots clés sur ce lien https://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Execute%20Javrary.html#Execute%20Javrary.html#Execute%20Javrary.html#Execute%20Javrary. >

Deuxième essai:

expand_xpath = "//span[text()='Submit']//ancestor::table//a[text()='Expand']"
driver.execute_javascript("document.getElementByXpath('${expand_xpath}').click()")

Sortie:

driver.execute_javascript("$(\"div[title='Cancel']\")[0].click()")


7 commentaires

Nous avons besoin de voir l'exemple de votre plate-forme.


@dpapadopoulos Qu'entendez-vous par exemple de plateforme?


Sur quelle plateforme votre code s'exécute-t-il? Avez-vous un lien pour que nous puissions pratiquer?


@dpapadopoulos J'utilise RobotFramework avec Python. Ce n'est pas possible pour vous de pratiquer.


RobotFramework n'a rien à voir avec cela. Dans tous les cas, il serait beaucoup plus facile pour les assistants potentiels de disposer de l'exemple de votre code et de la plate-forme sur laquelle vos scripts s'exécutent.


@dpapadopoulos Vous pouvez envisager d'utiliser Selenium basé sur Python avec la bibliothèque RobotFramework


Pouvez-vous télécharger le lien depuis le site sur lequel vous exécutez votre projet d'automatisation? Je ne parle pas de cadre de robot ou de liens de sélénium. Je dis la plate-forme que vous testez. Vous souhaitez cliquer sur un bouton. Ce bouton appartient à quelle plateforme? C'est la plateforme dont j'ai besoin.


3 Réponses :


1
votes

Essayez en cliquant sur l'élément en dessous de JavaScript: xxx

ou utilisez ci-dessous: xxx

note: "P" est en majuscule dans xpath .


8 commentaires

J'ai essayé cela et cela dira que l'argument attendu doit être de type string. Ce n'est pas la même chose que nous faisons dans le sélénium en utilisant JAVA.


expand_element = driver.get_webelement ("// span [text () = 'Submit'] // ancêtre :: ta‌ ble // a [text () = 'Expan‌ d']") driver.execute_javascript ( "arguments [0] .click ()", expand_element) Sortie: TypeError: élément de séquence 1: instance de chaîne attendue, WebElement trouvé


J'ai mis à jour ma réponse et converti la déclaration javascript en valeur de chaîne. Veuillez essayer le code.


Non, je vous ai déjà fourni la sortie en utilisant cette méthode


Veuillez noter que j'ai mis à jour ma réponse. Il y a un point-virgule avec l'instruction. Utilisez: driver.execute_script ("arguments [0] .click ();", élément)


TypeError: élément de séquence 1: instance str attendue, WebElement trouvé Je suppose que execute_javascript n'attend qu'un seul argument


D'accord, dans votre message d'origine, je vois que vous utilisez "getElementByXpath". À la place, veuillez utiliser «getElementByXPath». «P» est également en majuscules.


JavascriptException: Message: erreur javascript: document.getElementByXPath n'est pas une fonction



0
votes

Puisque vous utilisez RobotFramework, celui-ci est assez simple:

${locator}    //button[@id='abc']
Execute JavaScript    document.evaluate("${locator}", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click()

Notez que le xpath entré ne doit pas contenir de guillemets doubles ("), seulement des guillemets simples (') pour éviter Erreur d'analyse JS


0 commentaires

0
votes

J'utilise cette méthode pour gérer le clic.

Arguments: ele_xpath: XPATH de l'élément à cliquer.

from SeleniumLibrary import SeleniumLibrary  

def click_element_with_javascript(ele_xpath):
            try:
                js_exp = "document.evaluate(\"##xpath##\", document.body, null, 9, null).singleNodeValue.click()".replace('##xpath##', ele_xpath)
                driver.execute_javascript(js_exp)
            except Exception as e:
                print("Element click through javascript resulted in Exception: {}".format(e))


0 commentaires