有時候需要測試URL重定向是否正確,本文介紹一種使用selenium測試URL重定向的方法。
重定向的最直接表現是URL地址發生了變化,所有主要思路就是檢查URL地址是否跳轉成功。selenium檢測URL變化可以使用expected_conditions 方法:
from selenium.webdriver.support import expected_conditions as EC
EC.url_changes(current_url) # 檢查URL是否改變
EC.url_to_be(new_url) # 檢查重定向的URL
EC.url_contains('text') # 檢查URL是否包含text
EC.url_matches() # 是否匹配
EC.title_is('New page Title') # 檢查標題
EC.title_contains('text')
可以使用WebDriverWait方法等待URL是否重定向成功,具體實現請看下面的示例:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
class TestRedirect():
def setup(self):
self.driver = webdriver.Chrome()
self.driver.get("http://192.168.0.1/")
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_redirect(self, url="http://www.baidu.com", redrect_url="http://www.baidu.com/err_noWan.html", redrect=True,
timeout=5):
js = "window.open('%s')" % url
self.driver.execute_script(js)
windows = self.driver.window_handles
self.driver.switch_to.window(windows[-1]) # 切換到新打開的窗口
element = EC.url_changes(url) # 判斷是否重定向
try:
WebDriverWait(self.driver, timeout).until(element)
flag1 = element(self.driver)
except:
flag1 = element(self.driver)
assert flag1 == True
element = EC.url_to_be(redrect_url) # 判斷是否符合
try:
WebDriverWait(self.driver, timeout).until(element)
flag2 = element(self.driver)
except:
flag2 = element(self.driver)
assert flag2 == True
self.driver.close() # 關閉新打開的窗口
self.driver.switch_to.window(windows[0]) # 切回窗口
