【问题标题】:How can I open a new browser TAB?如何打开新的浏览器选项卡?
【发布时间】:2018-08-29 06:26:16
【问题描述】:

我正在尝试编写一个函数,该函数将接收“浏览器实例”(我的意思是webdriver.Firefox())并将打开一个带有特定 URL 的新标签。

这是函数:

def open_New_TAB(BrowserInstance, URL):
    if URL_Validation(URL):
        script = "window.open('" + URL + "')"
        BrowserInstance.execute_script(script)
    else:
        print('Invalid URL')
        return

URL_Validation 如果 URL 有效,则返回 True

BrowserInstance是以下函数的返回,它只在get(URL)完成后返回某个浏览器类型的“浏览器实例”:

def Open_Browser (URL=None, browserType='FF', Browser_Wait=20, Hide=False, 

    Maximize=False, Retries=3):

    if browserType == 'FF' or browserType == 'FireFox' or browserType == 'Firefox' or browserType == 'firefox':
        # FireFox Parameters
        profile = webdriver.FirefoxProfile()
        profile.accept_untrusted_certs = False
        browser = webdriver.Firefox(firefox_profile = profile, executable_path='G:\\Python\\geckodriver-v0.19.1-win64\\geckodriver.exe')

    elif browserType == 'Chrome' or browserType == 'chrome':
        # Chrome Parameters
        browser = webdriver.Chrome(executable_path="G:\\Python\\chromedriver_win32\\chromedriver.exe")

    elif browserType == 'IE' or browserType == 'Ie' or browserType == 'Explorer':
        browser = webdriver.Ie(executable_path="G:\\Python\\IEDriverServer_x64_3.8.0\\IEDriverServer.exe")

    else:
        print('No such browser type')

    browser.implicitly_wait(Browser_Wait) # Implicit wait
    browser.set_page_load_timeout(20) # Set the Timeout for waiting till the page loads

    for attempt in range(Retries):
        try:
            browser.get(URL)
        except TimeoutException:
            print("Timeout Expired at the:", attempt+1,'attempt')
    #         browser.close()
            continue   
    return browser

我期待open_New_TAB 将在运行以下脚本后在Open_Browser 函数打开的同一浏览器窗口中打开一个新标签:

browser = Open_Browser('http://10.0.1.76')
open_New_TAB(browser, 'http://10.0.7.131')

但是,不幸的是结果是为'http://10.0.7.131'打开了一个新的浏览器窗口。

我不明白为什么我得到了一个新窗口而不是一个新的 TAB,因为当我使用以下脚本时,我确实得到了新的 TAB。和这个脚本完全一样,只是没有这个功能

 driver = webdriver.Firefox()
 driver.get("https://10.0.1.76")
 driver.execute_script("window.open('https://10.0.1.76')")

如果有人能告诉我我做错了什么,我将不胜感激。如果您有另一种方法来完成打开新 TAB 的任务,那也没关系。顺便说一句,我尝试使用:driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') 但没有成功(我没有得到新的 TAB 也没有异常)

【问题讨论】:

  • 我猜测无法为“浏览器”实例打开新标签的原因是因为我没有使用默认配置文件。但是,我仍然不知道如何解决这个问题

标签: python python-3.x selenium selenium-webdriver selenium-firefoxdriver


【解决方案1】:

你得到一个新窗口是因为你要求一个新窗口

您使用的 JavaScript 直接在命令中说明了这一点。 Firefox 中有一个设置可以在选项卡中打开新窗口,但我不确定它是否适用于 Selenium 测试。

它叫做browser.link.open_newwindow。值为 2 表示关闭,值为 3 表示开启。您可以尝试通过配置文件设置该值,看看会发生什么。

【讨论】:

  • 这个 JavaScript 实际上会打开一个新的 TAB,但只有当我没有设置配置文件时。我一直在寻找您建议的设置,但在 FireFoxProfile 类下没有找到它。我在哪里可以找到它?
  • webdriver.FirefoxOptions 和 webdriver.FirefoxProfile 都不包含任何可能与此问题相关的属性。如何设置此属性?我的个人资料如何影响打开新标签的能力?
【解决方案2】:

正如米瓦斯科特所说

它被称为browser.link.open_newwindow。值为 2 表示关闭,值为 3 表示开启。您可以尝试通过配置文件设置该值,看看会发生什么。

这是正确的,但据我所知,无法更改此值,因为它是一个冻结值。我以前试过这个,这就是我的结论。我切换到 chrome 来解决这个问题,但是如果你一定要使用 firefox,恐怕你需要做一些事情,比如下载 firefox 驱动程序源代码,手动将此硬编码值设置为正确的值(2,我假设)并从该编辑源构建 webdriver。

【讨论】:

  • 谢谢。我明白你和 Miva 在说什么,我已经处理这个问题太久了。你怎么知道这是一个冻结值?而且,如果我不使用配置文件,怎么可能添加新的 TAB?
  • 当我遇到这个问题时,我使用 Visual Studio 调试器来更深入地了解错误的根本原因,因为我自己尝试设置这个值。然后它告诉我这个值已被冻结,因此无法更改。使用默认配置文件对我来说不是选项,但您介意在您这样做时检查它使用的配置文件吗?我猜这与您在正常使用 Firefox 时使用的配置文件相同,但也可能是正在使用新的临时配置文件。
  • 当我不编辑配置文件时,我很乐意检查我使用的是哪个配置文件。但是,我不知道该怎么做,我没有那么有经验。我应该在哪里以及如何检查这个?
  • 当您启动驱动程序时,您应该在 Firefox 中转到“about:support”,应该有一个链接(按钮)可以打开您当前的配置文件文件夹。
  • 对不起,我还是找不到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 2015-06-11
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
相关资源
最近更新 更多