tad*_*a23 4 python selenium tabs window-handles webdriverwait
由于 Firefox 不再支持 Control + T 选项卡,我开始使用 driver.execute_script("window.open('URL', 'new_window')")
我试图显示我打开的不同选项卡的标题并在它们之间切换。对于下面的示例,我希望输出为 facebook、google 并返回到 facebook。现在输出是 facebook、facebook 和 facebook。
我从这里尝试了答案,但它也不起作用:使用 selenium webdriver 切换回父选项卡
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)
driver.execute_script("window.open('http://google.com', 'new_window')")
print(driver.title)
driver.switch_to.window(driver.window_handles[0])
print(driver.title)
Run Code Online (Sandbox Code Playgroud)
更新:我尝试了以下代码,但仍然无法正常工作。
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)
window_before = driver.window_handles[0]
driver.execute_script("window.open('http://google.com', 'new_window')")
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
print(driver.title)
Run Code Online (Sandbox Code Playgroud)
关于选项卡/窗口切换/处理的几句话:
始终跟踪父窗口句柄,以便稍后根据您的用例在需要时返回。
始终使用WebDriverWait与expected_conditions为number_of_windows_to_be(num_windows)切换前标签/ Windows的。
始终跟踪子窗口句柄,以便您可以在需要时遍历。
始终使用WebDriverWait与expected_conditions作为title_contains("partial_page_title")提取之前页面标题。
这是您自己的代码,上面提到了一些小的调整:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox(executable_path=r'C:\WebDrivers\geckodriver.exe')
driver.get("http://www.facebook.com/")
print("Initial Page Title is: %s" %driver.title)
windows_before = driver.current_window_handle
driver.execute_script("window.open('http://google.com')")
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
windows_after = driver.window_handles
new_window = [x for x in windows_after if x != windows_before][0]
driver.switch_to.window(new_window)
WebDriverWait(driver, 20).until(EC.title_contains("G"))
print("Page Title after first window switching is: %s" %driver.title)
driver.close()
driver.switch_to.window(windows_before)
WebDriverWait(driver, 20).until(EC.title_contains("F"))
print("Page Title after second window switching is: %s" %driver.title)
driver.quit()
Run Code Online (Sandbox Code Playgroud)
控制台输出:
Initial Page Title is: Facebook – log in or sign up
Page Title after first window switching is: Google
Page Title after second window switching is: Facebook – log in or sign up
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4996 次 |
| 最近记录: |