当前位置: 首页 > 知识库问答 >
问题:

如何打开新的窗口使用机器人框架,硒?

姬衡
2023-03-14

在我测试的页面上有一个链接,默认情况下在新选项卡中打开。我需要打开链接,并在新打开的页面上验证一些值。因为我发现selenium不支持使用选项卡,所以我试图在新窗口中打开链接,但它仍然不能工作…我实现了python函数来保持SHIFT键(我以前为CTRL做过这个,它很有效),然后我调用了“click”函数,但链接仍然在新选项卡中打开

from robot.libraries.BuiltIn import BuiltIn
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

class CustomSeleniumLibrary(object):
    def __init__(self):
        self.driver = None
        self.library = None
        self.ac = None

    def get_library_instance(self):
        if self.library is None:
            self.library = BuiltIn().get_library_instance('ExtendedSelenium2Library')
        return self.library

    def get_action_chain(self):
        if self.ac is None:
            self.ac = ActionChains(self.get_library_instance()._current_browser())
        return self.ac

def hold_shift(self):
        actionChain = self.get_action_chain()
        actionChain.key_down(Keys.SHIFT)
        actionChain.perform()
Open project detail
     wait until element is visible  ${LINK_TO_PROJECT}
     ${project}=  get text  ${LINK_TO_PROJECT}
     hold shift
     click element   ${LINK_TO_PROJECT}
     #sleep  2s
     #release shift
     element should contain   //h3  Project Details: ${project}

我尝试了许多变体与睡眠,释放键等,但它从来没有真正打开链接在新的窗口。我也尝试在新打开的选项卡中验证数据(不尝试在新窗口中打开),但它总是很快重定向到原始选项卡,所以新选项卡上的DOM还没有加载…谢谢你的建议!

共有1个答案

濮阳鸿祯
2023-03-14

您可以使用以下代码处理在新选项卡中打开的页面:

current = driver.current_window_handle
driver.find_element_by_css_selector('a').click() # use own selector
new_tab = [tab for tab in driver.window_handles if tab != current][0]
driver.switch_to.window(new_tab)
# do some actions
driver.close()
driver.switch_to.window(current)

你也可以做小黑客(不推荐,但是...)若要避免处理新选项卡并强制链接在当前选项卡中打开:

link = driver.find_element_by_css_selector('a')
driver.execute_script('arguments[0].target="_self";', link)
 类似资料:
  • 我无法用最大化窗口启动无头铬合金。我尝试了两种解决方案,但都不适用。第一个解决方案: 第二个: 我的解决方案做错了什么?

  • 查看这段代码,它们展示了一种在登录后显示新窗口的方法。当用户名和密码是正确的,它打开新的对话框。我想要一个按钮点击打开新的对话框,而不检查用户名和密码。

  • 我是Robotframework的新手,编写了我的第一个selenium测试,遇到了一个问题,我无法使用robot framework的“打开浏览器”命令打开浏览器。它给我一个错误“chromedrvier可执行文件需要在PATH中”。我在PATH中有chromedriver,我可以使用终端运行chromdriver,而不必导航到bin文件夹。 给我错误的代码: 适用于我的代码: 我正在使用以下工

  • 问题内容: 我是angular js的新手,我希望在按下按钮后在浏览器的新窗口中打开PDF文档。 我在前端发出GET请求,在后端有一个Java Rest服务,该服务响应GET并生成PDF。我希望在浏览器中打开此PDF。 如果无法以这种方式打开PDF,那么至少要使用AngularJs打开任何PDF,我该怎么做? 这就是后端在其余服务中生成响应的内容。 问题答案: 如果您有这样的事情: 而是这样做:

  • 问题内容: 我正在尝试使用selenium for python在浏览器中打开一个新选项卡或一个新窗口。如果打开新的选项卡或新窗口并不重要,仅打开浏览器的第二个实例才很重要。 我已经尝试了几种不同的方法,但都没有成功。 切换到一个不存在的窗口,希望它在找不到该窗口时会打开一个新窗口: 通过打开的窗口进行迭代(尽管目前只有一个) 尝试模拟键盘按键 driver.send_keys(Keys.CONT

  • 我正在尝试设置一个容器,以便在Chrome上使用RobotFramework进行测试。 但是当我运行容器时,我总是得到一个WebDriverException。我已经找过了,但找不到任何对我有效的修复方法。 这是我的Dockerfile