【问题标题】:Selenium and Firefox on Ubuntu: focusing to the new tabUbuntu 上的 Selenium 和 Firefox:关注新标签
【发布时间】:2017-06-01 19:21:28
【问题描述】:

我正在 Ubuntu14.04 中开发 Selenium 和 Firefox。我通过 send_keys(Keys.CONTROL + 't') 创建了一个新选项卡,但一直在第一个选项卡上发出命令,可能是因为我没有正确关注新选项卡。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys

driver =  webdriver.Firefox()
main_window = driver.current_window_handle

driver.get("https://www.google.com")
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')

driver.switch_to_window(main_window)
driver.get("http://www.bing.com")

driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')

driver.switch_to_window(main_window)
driver.get("https://github.com/login")

运行此代码时没有错误。

我在访问 google.com 后创建了一个新标签,屏幕变为新标签上的空白页面。之后,我编写了 driver.switch_to_window(main_window) 以专注于新选项卡,以确保下一行代码将发生在新选项卡上。但是随着 driver.get("http://www.bing.com") 的执行,屏幕会返回到 google.com 所在的第一个选项卡,并将 google.com 更改为 bing.com。下一个代码也是如此。创建了另一个新选项卡,但在执行 driver.get("https://github.com/login") 并且 bing.com 变为 github.com/login 时返回到第一个选项卡。

我以为我通过

专注于当前可见的选项卡

main_window = driver.current_window_handle; driver.switch_to_window(main_window),

但这并没有奏效。 如何在 3 个不同的选项卡上加载所有 3 个网页?

规格:

  • 硒 3.0.2
  • 火狐45.0.1
  • Ubuntu 14.04 和 64 位
  • python 2.7.6

【问题讨论】:

    标签: selenium firefox selenium-firefoxdriver


    【解决方案1】:

    请尝试以下解决方案,如果不是您真正想要的,请告诉我:

    driver.get("https://www.google.com")
    google_window = driver.current_window_handle # Define main window
    
    driver.execute_script("window.open('http://www.bing.com')") # Open Bing window
    bing_window = [window for window in driver.window_handles if window != google_window][0] # Define Bing window
    
    driver.execute_script("window.open('https://github.com/login')") # Open GitHub window
    github_window = [window for window in driver.window_handles if window not in [google_window, bing_window]][0] # Define GitHub window
    

    打开所有 3 个窗口后,您可以简单地导航为:

    driver.switch_to_window(bing_window)
    ...# do something
    driver.switch_to_window(google_window)
    ...# do something
    driver.switch_to_window(github_window)
    

    【讨论】:

    • 这不是我要找的。我想创建标签并将重点放在新标签上。您的答案是制作新的 Firefox 窗口并在它们之间切换。
    • "put focus on the new tab" 是什么意思?又是为了什么? “切换”到新标签意味着“关注”它......对吗?
    • 不完全是。在 Selenium 中,即使切换到新选项卡,如果专注于新选项卡,您也可能无法执行任何操作。据我所知,切换和聚焦是不同的。请参阅gist.github.com/lrhache/7686903 处的代码。有一条评论说#将焦点放在当前窗口上,实际上,将焦点放在当前可见选项卡上 ->browser.switch_to_window(main_window)
    • 太棒了?...browser.switch_to_window(main_window)switch_to_window切换! :) 这是关注新窗口!这正是我的代码所做的:您在新选项卡中打开URL,切换到它,处理该页面上的所有内容......有什么问题?我不明白:)
    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2018-02-19
    • 2016-11-28
    • 1970-01-01
    相关资源
    最近更新 更多