10.handles页面切换操作技巧-基于unittest框架

以下是基于unittest框架用例实现

在完成页面的切换的时候如果需要对切换后的页面进行操作就需要对句柄handles进行操作,不然页面就会出现错误,下面是基于unittest框架下面的用例实现。

下面以百度新闻为例

在进入新的页面的时候,如果需要获取新的页面的标题或者是对新的页面的链接进行操作,需要切换句柄,下面是对句柄进行切换

    def test_01(self):
        '''百度新闻—国内'''
        #打开新的链接
        self.driver.find_element_by_xpath('//*[@id="pane-news"]/div/ul/li[2]/strong/a/b').click()
        time.sleep(1)
        #获取全部的句柄,这里会有两个句柄
        hand = self.driver.window_handles
        print(hand)
        #将句柄切换到新的页面
        self.driver.switch_to.window(hand[1])
        #进行断言,判断森林这个文字是否在页面内
        self.assertIn("森林", self.driver.page_source)

上面是对一个用例的时候的句柄进行切换,没有什么难度
如果有两个用例的时候,比如我想在百度新闻首页点击一个连接之后接着继续回到百度新闻首页点击其他的链接,就需要在每次执行完成之后切换回来首页的句柄,也就是百度新闻这个页面的句柄,不然第二个用例在执行过程中会出现错误

    def test_01(self):
        '''百度新闻—国内'''
        self.driver.find_element_by_xpath('//*[@id="pane-news"]/div/ul/li[2]/strong/a/b').click()
        time.sleep(1)
        hand = self.driver.window_handles
        print(hand)
        self.driver.switch_to.window(hand[1])
        print(self.driver.current_window_handle)
        self.assertIn("森林", self.driver.page_source)
        #切换回来百度新闻首页的句柄
        self.driver.switch_to.window(hand[0])
        

    def test_02(self):
        '''百度新闻—国内'''
        self.driver.find_element_by_xpath('//*[@id="localnews-focus"]/li[1]/a').click()
        time.sleep(1)
        hand = self.driver.window_handles
        self.driver.switch_to.window(hand[1])
        self.assertIn("广医一院专家入驻市八医院,联手开创抗疫“广州模式”_南方plus_南方", self.driver.page_source)
        #切换回来百度新闻首页的句柄
        self.driver.switch_to.window(hand[0])

但是上面的代码有一定的缺陷,如果第一个断言出现错误的话他后面的self.driver.switch_to.window(hand[0])这句代码将不会执行,也就是无法切换回来百度新闻的首页,这样子在执行第二个用例的时候就会出现错误。
所以在这里可以尝试用try在进行检错

下面以一个用例为例子:

    def test_01(self):
        '''百度新闻—国内'''
        self.driver.find_element_by_xpath('//*[@id="pane-news"]/div/ul/li[2]/strong/a/b').click()
        time.sleep(1)
        hand = self.driver.window_handles
        print(hand)
        self.driver.switch_to.window(hand[1])
        print(self.driver.current_window_handle)
        print(self.driver.title)
        time.sleep(1)
        try:
            #断言,判断标题是否在文章内
            self.assertIn("广医一院专家入驻市八医院,联手开创抗疫“广州模式”_南方plus_南方", self.driver.page_source)
        except:  #如果上面断言不通过,就会执行下面这个
            self.assertIn("广医一院专家入驻市八医院,联手开创抗疫“广州模式”_南方plus_南方", self.driver.page_source)
        finally:    #无论try的结果如何都执行这个,如果是else的话只有try的结果为正确的才会执行else
        	self.driver.switch_to.window(hand[0])	#无论断言结果如何都执行切换

通过上面的操作,无论第一个断言是正确的还是错误的,程序都会执行第二个用例,这样子能够正确的切换断言

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值