2017-01-17 23 views
1

我正在使用Ubuntu14.04中的Selenium和Firefox。我通過send_keys(Keys.CONTROL +'t')創建了一個新選項卡,但繼續在第一個選項卡上發出命令,可能是因爲我沒有正確地關注新選項卡。Ubuntu上的Selenium和Firefox:專注於新標籤

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 AMD 64位
  • 蟒蛇2.7.6

回答

0

請嘗試以下解決方案,讓我知道這不是你實際尋找的東西:

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) 
+0

這不是我所期待的。我想創建標籤並將焦點放在新標籤上。你的答案是關於製作Firefox的新窗口並在它們之間切換。 –

+0

你是什麼意思'「把重點放在新標籤上」?什麼? 「切換」到新選項卡意味着「關注」它...對嗎? – Andersson

+0

不完全。在Selenium中,即使切換到新選項卡,如果關注新選項卡,則可能無法執行任何操作。就我所知,切換和聚焦是不同的。請參閱https://gist.github.com/lrhache/7686903上的代碼。有一個評論說#把焦點放在當前窗口上,實際上,它將焦點放在當前可見標籤上 - > browser.switch_to_window(main_window) –