new_window_is_opened(current_handles)
new_window_is_opened(current_handles)
是期望打开一个新窗口并增加窗口句柄的数量。
示范
以下示例首先打开 URL http://www.google.co.in,然后在相邻选项卡中打开 URL https://www.yahoo.com :
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get("http://www.google.co.in")
windows_before = driver.window_handles
driver.execute_script("window.open('https://www.yahoo.com')")
WebDriverWait(driver, 20).until(EC.new_window_is_opened(windows_before))
driver.switch_to.window([x for x in driver.window_handles if x not in windows_before][0])
注意:传递给的参数new_window_is_opened(current_handles)
是一个列表。为了创建一个列表,我们需要使用windows_before = driver.window_handles
这个用例
在您的代码块中,预计当您:
current = self.driver.current_window_handle
只有一个窗口句柄。所以继续前进,代码行:
wait(self.driver, 10).until(EC.new_window_is_opened(self.driver.window_handles))
将等待打开一个新窗口并增加窗口句柄的数量,并且只有在执行打开一个新窗口的操作后才会发生这种情况,这似乎从您的代码块中丢失。
解决方案
插入启动新窗口句柄打开的代码行:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
windows_before = driver.window_handles
element = driver.find_element_by_xpath("//input[@id='save' and @name='save'][@value='View Report']")
driver.execute_script("arguments[0].click();", element)
WebDriverWait(self.driver, 10).until(EC.new_window_is_opened(windows_before))
driver.switch_to.window([x for x in driver.window_handles if x not in windows_before][0])
assertTrue("Valuation" == driver.title)
注意:根据您在评论中更新的代码行,您没有使用Python 类,因此您不应该使用关键字self
。