zoukankan      html  css  js  c++  java
  • 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()里,每次执行完毕后,关闭当前窗口,再切换第一个窗口。

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

    答:做一个句柄判断。

     

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

     

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

     

  • 相关阅读:
    工作中Linux常用命令
    自动化测试
    Firefox/Chrome WebDriver浏览器驱动
    Appium
    Python+selenium进行浏览器的连接ChromeOptions
    文件及异常捕获处理
    面向对象练习题
    python函数&面向对象
    python基础
    python8道练习题
  • 原文地址:https://www.cnblogs.com/4wheel/p/10149816.html
Copyright © 2011-2022 走看看