如何使用预期条件 new_window_is_opened 切换选项卡并使用 Selenium 和 Python 验证页面标题
How to switch tabs using the expected conditions new_window_is_opened and verify the page title using Selenium and Python
我正在编写一个遍历多个页面然后验证标题是否显示的测试。目前我的测试是在我可以点击一个按钮并打开一个报告的时候。问题是报告在新选项卡中打开,所以我需要我的测试来移动选项卡并验证新选项卡中的标题。
需要验证的标题是'valuation'。我做了一个断言来确认标题与我期望的相同
我已经在 python 中编写了下面的代码。它目前在第二行等待失败
current = self.driver.current_window_handle
wait(self.driver, 10).until(EC.new_window_is_opened(self.driver.window_handles))
self.driver.switch_to.window([w for w in self.driver.window_handles if w != current][0])
title = self.driver.title
self.assertTrue("Valuation" == self.driver.title)
我正在使用以下代码行打开一个新选项卡:
element = driver.find_element_by_xpath("//input[@id='save' and @name='save'][@value='View Report']")
driver.execute_script("arguments[0].click();", element)
new_window_is_opened(current_handles)
new_window_is_opened(current_handles)
是期望打开一个新的 window 并增加 windows 句柄的数量。
示范[=35=]
以下示例在相邻选项卡中打开 url http://www.google.co.in first and then opens the 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])
Note: The argument passed to new_window_is_opened(current_handles)
is a list. In order to create a list we need to use windows_before = driver.window_handles
这个用例
在您的代码块中,预计当您:
current = self.driver.current_window_handle
只有一个 window 句柄。所以继续前进,代码行:
wait(self.driver, 10).until(EC.new_window_is_opened(self.driver.window_handles))
将等待打开新的 window 并使 windows 句柄的数量增加,并且只有在执行打开新的 window 的操作后才会发生这种情况,您的代码块中似乎缺少它。
解决方案
插入启动新 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)
Note: As per the lines of code you have updated within your comments you are not using Python class, so you shouldn't use the keyword self
.
我正在编写一个遍历多个页面然后验证标题是否显示的测试。目前我的测试是在我可以点击一个按钮并打开一个报告的时候。问题是报告在新选项卡中打开,所以我需要我的测试来移动选项卡并验证新选项卡中的标题。
需要验证的标题是'valuation'。我做了一个断言来确认标题与我期望的相同
我已经在 python 中编写了下面的代码。它目前在第二行等待失败
current = self.driver.current_window_handle
wait(self.driver, 10).until(EC.new_window_is_opened(self.driver.window_handles))
self.driver.switch_to.window([w for w in self.driver.window_handles if w != current][0])
title = self.driver.title
self.assertTrue("Valuation" == self.driver.title)
我正在使用以下代码行打开一个新选项卡:
element = driver.find_element_by_xpath("//input[@id='save' and @name='save'][@value='View Report']")
driver.execute_script("arguments[0].click();", element)
new_window_is_opened(current_handles)
new_window_is_opened(current_handles)
是期望打开一个新的 window 并增加 windows 句柄的数量。
示范[=35=]
以下示例在相邻选项卡中打开 url http://www.google.co.in first and then opens the 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])
Note: The argument passed to
new_window_is_opened(current_handles)
is a list. In order to create a list we need to usewindows_before = driver.window_handles
这个用例
在您的代码块中,预计当您:
current = self.driver.current_window_handle
只有一个 window 句柄。所以继续前进,代码行:
wait(self.driver, 10).until(EC.new_window_is_opened(self.driver.window_handles))
将等待打开新的 window 并使 windows 句柄的数量增加,并且只有在执行打开新的 window 的操作后才会发生这种情况,您的代码块中似乎缺少它。
解决方案
插入启动新 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)
Note: As per the lines of code you have updated within your comments you are not using Python class, so you shouldn't use the keyword
self
.