【问题标题】:How to click on a WebElement using JavaScript using RobotFramework SeleniumLibrary in Python?如何在 Python 中使用 RobotFramework SeleniumLibrary 使用 JavaScript 单击 WebElement?
【发布时间】:2020-08-18 23:27:06
【问题描述】:

我正在尝试使用 JavaScript 单击 WebElement,但无法为此创建 JavaScript 语句。

我可以使用此语句单击取消按钮

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

但是在点击另一个更复杂的元素时,我正在尝试这个

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

JavascriptException:消息:javascript 错误:document.getElementByXpath 不是函数

expand_xpath 正在存储我需要单击的 WebElement 的 xpath,但我无法为单击此元素构建 JS 代码。

请在此链接上找到 RobotFramework Execute Javascript 关键字扩展 https://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Execute%20Javascript

第二次尝试:

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: javascript error: missing ) after argument list

【问题讨论】:

  • 我们需要看看你们的样板平台。
  • @dpapadopoulos 示例平台是什么意思?
  • 您的代码针对哪个平台运行?你有链接让我们练习吗?
  • @dpapadopoulos 我正在使用带有 Python 的 RobotFramework。你不可能练习。
  • RobotFramework 与此无关。在任何情况下,可能的帮助者都会更容易获得您的代码示例和运行脚本的平台。

标签: javascript python selenium robotframework


【解决方案1】:

尝试使用下面的 javaScript 点击元素:

 element= driver.find_element_by_xpath("//span[text()='Submit']//ancestor::table//a[text()='Expand']")
 driver.execute_script("arguments[0].click();", element)

或在下面使用:

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

注意:“P”在XPath中是大写的。

【讨论】:

  • 我已经尝试过了,它会说预期的参数应该是字符串类型。这与我们在 selenium 中使用 JAVA 所做的不同。
  • expand_element = driver.get_webelement("//span[text()='Submit']//ancestor::table//a[text()='Expand']") driver.execute_javascript("arguments[0].click()", expand_element) 输出: TypeError: sequence item 1: expected str instance, WebElement found
  • 我已经更新了我的答案并将 javascriot 语句转换为字符串值。请尝试代码。
  • 不,我已经用那个方法给你输出了
  • 请注意我已经更新了我的答案。语句中有一个分号。使用:driver.execute_script("arguments[0].click();", element)
【解决方案2】:

由于您使用的是 RobotFramework,所以这个非常简单:

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

注意输入的xpath不能包含双引号(")字符,只有单引号('),防止JS解析错误

【讨论】:

    【解决方案3】:

    我就是用这个方法来处理点击的。

    参数: ele_xpath : 要点击的元素的 XPATH。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2019-01-18
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 2019-06-04
      • 2018-05-27
      • 2017-04-16
      相关资源
      最近更新 更多