首页 > 其他分享 >Selenium17--多窗口场景

Selenium17--多窗口场景

时间:2022-12-15 22:22:17浏览次数:40  
标签:窗口 -- 句柄 Selenium17 多窗口 driver window 切换 浏览器

多窗口场景

实际使用时,经常出现新浏览器窗口(或新标签页),需要切换

切换到最新窗口

切换到最新窗口的步骤:

list1 = driver.window_herdles
driver.swich_to.window(list1[-1])
  • driver.window_herdles
    • 获取打开的所有窗口句柄,是一个列表
    • 句所谓句柄(handles),就是窗口的唯一标识,系统通过窗口的句柄来区分不同的窗口。
    • 列表中每个窗口句柄的出现顺序是窗口的启动顺序,所有最后启动的那个窗口的句柄就是列表最后一个成员(索引号是-1)。

获得当前窗口句柄

  • driver.current_window_handle获得当前窗口句柄
  • 应用场景
    • 可以在切换到最新窗口之前获得原窗口句柄,切换到新窗口进行操作之后,再使用这个原来保存的句柄切换回去。

关闭窗口的方法

# 关闭本次运行期间所启动的所有浏览器窗口,退出驱动程序,一般用于程序末尾,测试结束后使用
driver.quit()
# 关闭当前一个浏览器窗口,保留其它浏览器窗口,一般用于业务步骤之间,属于一个测试中间的操作步骤
driver.close()
"""
	打开前台首页
	点击 "EC论坛",等待8秒
	获得当前窗口句柄,保存在变量中
	切换到最新窗口
	在新窗口里点击右上角的 注册 等待3秒
	关闭新窗口
	用前面变量里保存的句柄切换到原窗口
	点击 高级搜索
"""

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox() # 启动浏览器
driver.get('http://localhost/upload/index.php')
driver.find_element(By.LINK_TEXT,'EC论坛').click()  # 点击 登录按钮
a = driver.current_window_handle
b = driver.window_handles
driver.switch_to.window(b[-1])
driver.find_element(By.LINK_TEXT,'注册').click()
driver.close()
driver.switch_to.window(a)
driver.find_element(By.LINK_TEXT,'高级搜索').click()
sleep(3)
driver.quit()

注意事项:

  • 所有的操作只针对当前窗口

    • 比如close只关闭当前一个窗口,find_element查找元素只在当前窗口里查找
  • 没有执行窗口切换的代码时,当前窗口就是最初启动的窗口

  • 当前窗口已经被关闭后,不会自动切换到其它窗口

    • 就算其它窗口只有一个,也不会自动变为当前窗口
  • NoSuchWindowException异常原因

    • 当前窗口已经被关闭,或要切换到目标窗口句柄不正确

切换窗口语法总结

  • driver.current_window_handle → 获得当前浏览器窗口句柄
  • driver.windows_handles → 获得所有浏览器窗口句柄(List)
  • driver.switch_to.window(窗口句柄) → 切换到特定窗口
  • driver.close() → 关闭当前一个浏览器窗口
  • driver.quit() → 关闭所有浏览器窗口

标签:窗口,--,句柄,Selenium17,多窗口,driver,window,切换,浏览器
From: https://www.cnblogs.com/sean-test/p/16986133.html

相关文章

  • SQLALchemy框架
    SQLALchemy的介绍SQLALchemy是一个基于Python实现的ORM框架,该框架建立在DBAPI之上,使用关系对象映射进行数据库操作,简而言之就是:将类和对象转换成SQL,然后使用数据API执行......
  • Selenium16--切换消息框
    消息框是指在网页里进行某些操作(点击按钮、点击超级链接等)后,在网页上一层出现弹出来的对话框,对话框里显示要提示给客户的消息。JavaScript根据功能把它分为三类Alert......
  • 第二章 虚拟机安装相关
    2.网关配置vi/etc/sysconfug/network-scripts/ifcfg-ens-33启动网关:systemctlrestartnetwork.service2.1防火墙查看状态:systemctlstatusfirewalld......
  • 笔记-C语言中static作用
    C语言中,static关键词可以用来修饰变量和函数,用static关键词修饰的变量成为静态变量。static关键词的作用主要包括3个方面:1.隐藏一个项目中往往包括多个.c文件,所有未加st......
  • flask-06
    一、flask项目演示pycharm打开项目 安装依赖:虚拟环境 pipinstall-rreq.txt在数据库创建库:movie    看一下:root用户密码不是123,改代码,两个地方(__init__.p......
  • NOIP2022 题解
    终于有机会补NOIP的题了T1考虑枚举C与F的纵列考虑预处理出每个点最左边和最下边可以延伸到哪之后枚举列,然后对行做类似于扫描线的操作,统计有多少可行的"第一横行"......
  • WinForm(十)项目框架结构
    看到下面的项目结构,是否曾经相识?不要笑,这也是一种项目结构,极简主义。   项目结构没有对错,合适就好,但也要有几个要求,至少要做到结构明确,清晰,当然上图的结构......
  • 纯手搓的超级炫酷的网页!看看效果吧~
    肝了半天的代码 indexindex.html(最新)<html> <head> <title>BMPro!</title> <script> window.oncontextmenu=function(e){ e.preventDefault();//取......
  • HDU 4614 ——线段树+二分
    //题意:茜茜学姐的情人节到了!众所周知,茜茜学姐喜欢帅气的学弟,所以她当然有很多学弟送的花瓶,据不完全统计,茜茜学姐有N个花瓶(标号为0~N-1)。当然茜茜学姐也是个魅力四射......
  • @Bean的使用
    Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的......