【问题标题】:How to handle multiple windows in Python selenium with Firefox driver如何使用 Firefox 驱动程序在 Python selenium 中处理多个窗口
【发布时间】:2018-06-13 19:22:39
【问题描述】:

我想学习 Python Selenium 中的 WINDOW 处理。

我的任务是:

首先打开“Google.com”。

新窗口中再次打开“Yahoo.com”。

第三次切换回第一个窗口并点击 Gmail 链接。

第四次切换到第二个窗口并点击Finance Link。

以下代码对我有用:

browser.get("http://www.google.co.in")
browser.execute_script("window.open('https://www.yahoo.com')")
browser.switch_to_window(browser.window_handles[0])
print(browser.title)
gmail=browser.find_element_by_class_name("gb_P")
gmail.click()
browser.switch_to_window(browser.window_handles[1])
print(browser.title)
fin=browser.find_element_by_link_text("Finance")
fin.click()

但是当我尝试将序列更改为任务时:

首先打开“Google.com”。

新窗口中再次打开“Yahoo.com”。

第三个留在同一窗口中,然后点击 Finance Link。

第四次切换到第一个窗口并点击Gmail链接。

下面的更改的任务代码,在新窗口中打开 yahoo.com,然后单击财务链接,然后切换到包含 Google.com 的主窗口,然后单击 Gmail 链接后不会'工作:

browser.get("http://www.google.co.in")
browser.execute_script("window.open('https://www.yahoo.com')")
browser.switch_to_window(browser.window_handles[1])
print(browser.title)
fin=browser.find_element_by_link_text("Finance")
fin.click()
browser.switch_to_window(browser.window_handles[0])
print(browser.title)
gmail=browser.find_element_by_class_name("gb_P")
gmail.click()

但如果我在切换到 Yahoo 选项卡后刷新页面,这仅适用于 Chrome 驱动程序,不适用于 Firefox 驱动程序。

browser.get("http://www.google.co.in")
print(browser.current_window_handle)
browser.execute_script("window.open('https://www.yahoo.com')")
print(browser.current_window_handle)

WebDriverWait(browser, 10).until(EC.number_of_windows_to_be(2))


browser.switch_to_window(browser.window_handles[1])
print(browser.current_window_handle)
print(browser.title)

browser.refresh()

fin=browser.find_element_by_link_text("Finance")
fin.click()
print(browser.window_handles)

WebDriverWait(browser,10000)

browser.switch_to_window(browser.window_handles[0])
print(browser.title)
print(browser.current_window_handle)
gmail=browser.find_element_by_class_name("gb_P")
gmail.click()

【问题讨论】:

  • 你能把问题缩小到你到底在找什么吗?
  • @DebanjanB 为什么我的任务更改顺序的代码不起作用?
  • @DebanjanB 为什么改变任务序列的代码不起作用?
  • what doesn't works 更新问题,如altered code for the task doesn't work
  • @DebanjanB 我试图在编辑中解释。

标签: python-3.x selenium selenium-webdriver selenium-chromedriver geckodriver


【解决方案1】:

根据您更新的问题,关于选项卡/窗口切换/处理的几句话

  • 始终跟踪 父窗口 句柄,以便您可以遍历其余用例。
  • 始终将 WebDriverWaitexpected-conditions 一起使用为 number_of_windows_to_be(num_windows)
  • 始终跟踪子窗口句柄,以便您可以在需要时返回。
  • 这是您自己的代码,上面提到了一些小的调整:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    #other lines of code
    browser.get("http://www.google.co.in")
    print("Initial Page Title is : %s" %browser.title)
    windows_before  = browser.current_window_handle
    print("First Window Handle is : %s" %windows_before)
    browser.execute_script("window.open('https://www.yahoo.com')")
    WebDriverWait(browser, 10).until(EC.number_of_windows_to_be(2))
    windows_after = browser.window_handles
    new_window = [x for x in windows_after if x != windows_before][0]
    # browser.switch_to_window(new_window) <!---deprecated>
    browser.switch_to.window(new_window)
    print("Page Title after Tab Switching is : %s" %browser.title)
    print("Second Window Handle is : %s" %new_window)
    
  • 控制台输出:

    Initial Page Title is : Google
    First Window Handle is : CDwindow-34D74AB1BB2F0A1A8B7426BF25B86F52
    Page Title after Tab Switching is : Yahoo
    Second Window Handle is : CDwindow-F3ABFEBE4907CFBB3CD09CEB75ED570E
    

浏览器快照:

现在您已经拥有两个 窗口句柄,因此您可以轻松切换到任何 TAB 来执行任何操作。

【讨论】:

  • 先生,我仍然无法打开 YAHOO 上的 FINANCE 链接,然后切换回 GOOGLE 并单击 GMAIL.
  • 切换后刷新页面才有效!!
  • @user8810517 此答案是根据您的问题(标题)How to handle multiple windows in PythonWINDOW handling in Python Selenium 构建的。如果您的要求发生了变化,请随时向您提出新的问题。 Stackoverflow 志愿者很乐意为您提供帮助。
  • 先生,您的回答肯定回答了主要问题。但我的一半问题仍未得到解答。为什么我的代码没有按照我的任务顺序运行。我已经更新了切换后如何引用页面的问题,但也仅限于 Chrome 驱动程序。
猜你喜欢
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2021-05-30
  • 2014-01-03
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多