【问题标题】:Selenium webdriver - execute_script on the browser that I'm currently inSelenium webdriver - 我当前使用的浏览器上的 execute_script
【发布时间】:2021-02-25 17:07:16
【问题描述】:

所以我在 Firefox 网络驱动程序中使用 Robot Framework 运行一些测试。 在这些测试中,我需要做这样的事情:

from selenium import webdriver 
from robot.api.deco import keyword
from robot.libraries.BuiltIn import BuiltIn
from SeleniumLibrary import SeleniumLibrary


@keyword('Refresh Page Menu')
def refresh_page():
        # create webdriver object 
        driver = webdriver.Firefox() 
        driver.get("https://mytest.html") 
        # write script 
        script = "navigateTodiagram(305)"
       # generate a alert via javascript 
        driver.execute_script(script) 

问题是如何使用我目前在 Robot Framework 上进行测试的网络来做到这一点。 而不是打开一个新的浏览器? 我想在我进行测试的浏览器上执行_script("navigateTodiagram(305)")。

有人有什么想法吗? 非常感谢

【问题讨论】:

  • selenium 不支持该工作流。
  • 您想编写自己的 JavaScript 并在当前 Selenium 会话中执行它吗?
  • @JaSON 如果这种方式可行,我可以做到,是的,我从来没有使用过javascript。您对如何实施它有任何想法吗?或者任何可以提供帮助的文档?谢谢

标签: python selenium selenium-webdriver webdriver robotframework


【解决方案1】:

阅读 SeleniumLibrary 的文档 - 正好有一个关键字,Execute Javascript

Execute Javascript    navigateTodiagram(305)

【讨论】:

  • 非常感谢,这很有效:) 你知道如果我这样做,我是否可以获得命令的结果?
  • 是的,将输出分配给一个变量 - 例如${my var}= Execute Javascript navigateTodiagram(305)
  • 感谢您的快速回复,我注意到了 :) 但不能将该输出变量用作:` Execute Javascript navigateTodiagram(${my var}) `,是吗?
  • 这种情况也是可以的;当你将${my var} 放在 js 函数参数中时,你应该想——那里应该有什么类型?如果函数接受数字,并且变量的值将始终为 int/float,那么navigateTodiagram(${my var}) 将起作用,RF 将输入${my var} 变量的数字值。但是如果函数需要一个字符串,那么你应该用引号将它括起来,所以它是一个有效的 - navigateTodiagram("${my var}"),并且不会破坏 JS 语法。
  • 再次感谢您的回复,我试过了,还是不行。该命令的结果是一个 int。我注意到的是,通过这样做: ${my var}= Execute Javascript MYAPP.current_navigation_hash ,它没有保存在变量中。你知道为什么吗?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2017-01-01
  • 2019-02-09
  • 1970-01-01
  • 2013-02-17
  • 2012-12-19
相关资源
最近更新 更多