py+selenium IE 用driver.close()却把两个窗口都关了【已解决】

环境: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()里,每次执行完毕后,关闭当前窗口,再切换第一个窗口。

问:那我有些用例只有一个窗口在跑怎么办?

答:做一个句柄判断。

 

其他情况就自己再造化了~~

 

 如有错误,请及时指出,谢谢!

 

原文地址:https://www.cnblogs.com/4wheel/p/10149816.html