环境:py3 selenium unittest
测试浏览器:IE10
目标:在单个文件中,有多个用例,执行完A用例,由于打开了新的窗口,必须关闭新的窗口,才不会影响下一条用例的执行。
问题:按例子1的代码,运行test001_a后,直接把两个窗口全部关闭,导致test002_b无法运行报错(以下只是例子,不一定会失败,实际运行系统时由于性能,网络等原因肯可能会失败)。
例子1:
1 # coding:utf-8
2 import unittest
3 from selenium import webdriver
4
5
6 class Testabc(unittest.TestCase):
7 @classmethod
8 def setUpClass(cls):
9 # 打开IE浏览器
10 cls.driver = webdriver.Ie()
11 # 最大化浏器
12 cls.driver.maximize_window()
13
14 @classmethod
15 def tearDownClass(cls):
16 cls.driver.quit()
17
18 def test001_a(self):
19 print(1)
20 # 打开新的窗口
21 self.driver.execute_script('window.open("https://www.sogou.com");')
22 self.driver.switch_to.window(self.driver.window_handles[-1]) # 切换到当前最新打开的窗口
23 self.driver.close() # 关闭当前窗口
24 self.driver.switch_to.window(self.driver.window_handles[-1]) #切换到当前最新打开的窗口
25
26 def test002_b(self):
27 print(2)
28
29
30 if __name__ == "__main__":
31
32 suite = unittest.TestLoader().loadTestsFromTestCase(Testabc)
33 unittest.TextTestRunner(verbosity=2).run(suite)
若出现窗口全部被关闭,test002_b未执行,报错
则原因应该是,line22-24,由于代码运行速度较快,执行关闭后,窗口并未马上关闭,但已经执行了下一句,又切换到那个关闭的窗口,而运行第二条用例时,找不到第一个窗口的元素,因为没有切换到这个窗口!!
所以解决方案:
1,加入等待时间
2、如果只有两个窗口,直接关闭窗口后切换到第一个窗口
如图:
引申:
如果测试有经常打开窗口的,可以将这个放到teardown()里,每次执行完毕后,关闭当前窗口,再切换第一个窗口。
问:那我有些用例只有一个窗口在跑怎么办?
答:做一个句柄判断。
其他情况就自己再造化了~~
如有错误,请及时指出,谢谢!