Selenium_Python实践遇到的问题一:页面存在多窗口时,window_handles属性在保存窗口句柄列表时的顺序不一定和打开页面的顺序一致

问题背景:在项目实践过程中有这样一种情况:

1…A页面上点击按钮,打开新的页面B

2.B页面上填入数据,完成后会自动关闭B页面

3.如果B页面上的数据需要做参数化,那么必须采用循环不停的点击A页面上的按钮、switch_to_window到B页面、再switch_to_window到A页面

实现步骤:1.A页面点击按钮后,用window_handles保存所有的窗口句柄,此时列表有两个元素

2.切换到B页面,采用switch_to_window[1],即窗口句柄列表的最后一个

3.在B页面输入相关数据并确定

发现问题:在循环参数化的过程中,有时会在实现步骤的第3步找不到相关元素,导致脚本报错。经过调试发现,一般情况下在保存窗口句柄列表时是和打开页面

的顺序是一致的,但此次报错时的顺序发生了变化,B页面的窗口句柄跑到了前面,所以实际上是根本没有switch_to_window到B页面,所以实现

步骤的第3步找不到相关元素

问题解决:碰到这个问题的时候,实际是实现步骤的第2步存在问题,那怎么解决呢,经过思考,解决思路如下:

1.A页面打开时,window_handles保存所有的窗口句柄 listA【一个元素】

2.b页面打开后,window_handles再保存一次所有的窗口句柄 listAB【两个元素】

3.listAB、listA这两个列表中会有一个元素是重复的,那就是A窗口的窗口句柄,那么listAB去掉这两个列表中重复的元素,剩下的元素就是B窗口的

句柄,再通过列表的iindex方法得到B窗口句柄在listAB的索引,填入实现步骤的第二步即可

4.剩下的问题就转化成了listAB、listA去掉重复的问题,也就是Python列表操作的问题

5.为此写了一个函数,接收两个参数,即listA,listAB,可以得到去重后的窗口句柄对应的索引

def tag_window(listA_win,listAB_win):
         for i in listAB_win:
          if i not in listA_win:
           return listAB_win.index(i)
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值