热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

selenium自动化中的三大切换

三大切换分为:窗口切换、iframe切换、alert弹框处理(非HTML弹框)ps(使用的HTML文件这里获取,提取码:t0n7)一、窗口切换1、需要知道你要切换的窗口叫什么?--

三大切换分为:窗口切换、iframe切换、alert弹框处理(非HTML弹框)      ps(使用的HTML文件这里获取,提取码:t0n7)

一、窗口切换

1、需要知道你要切换的窗口叫什么?--句柄。 获取当前会话浏览器打开的所有窗口句柄 

通过:driver.window_handles  -- 把句柄存储在 “列表” 中,按照窗口出现的循序。

2、切换过去:driver.seitch_to.window(window的句柄)。

3、进入了新的页面,元素操作都只针对新的页面。



from
selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver
= webdriver.Chrome()
driver.get(
"file:///E:/WebWebpageTest/page.html")
driver.maximize_window()
# 最大化浏览器
#
定位表达式,跳转新页面点击的元素
loc = (By.XPATH, //a[@id="ZCA"])
WebDriverWait(driver,
30).until(EC.visibility_of_element_located(loc))
# 点击元素出现新的页面
driver.find_element(*loc).click()
# 新的窗口出现了
#
等待有新的窗口出现,再去切换窗口
time.sleep(0.5) # 有时候立即去获取窗口取不到值
#
获取所有窗口的句柄
wins = driver.window_handles
print(所有的窗口句柄, wins)
# 返回当前窗口的句柄
cur_win = driver.current_window_handle
print(当前的窗口句柄是:, cur_win)
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
print(最新的窗口句柄是:, wins[-1])
# 定位表达式,新页面输入框元素
loc = (By.XPATH, //input[@id="userA"])
WebDriverWait(driver,
30).until(EC.visibility_of_element_located(loc))
# 在新的窗口输入数据
driver.find_element(*loc).send_keys(这是新窗口)
# 查看成果
time.sleep(3)
driver.quit()


 

技术分享图片

 

技术分享图片

 

 

二、iframe切换

iframe就是HTML页面里面嵌套另一个HTML页面,

如果你要操作的元素,在iframe当中,那么必要切换到iframe 

1、你的元素是否在iframe里面

2、找到这个iframe

3、切换到iframe 

通过查看路径就可以看到有两个HTML 和一个iframe,就说明3在2的里面,就需要切换iframe

技术分享图片

 

技术分享图片

 

 

 

切换iframe,支持传的三个参数 1、iframe元素的name,

               2、iframe元素的下标(从0开始),

               3、iframe对应的WebElement对象(通过元素的八大元素定位)

 


from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver
= webdriver.Chrome()
driver.get(
"file:///E:/WebWebpageTest/page.html")
driver.maximize_window()
# 最大化浏览器
# 切换iframe 三种类型的传递
driver.switch_to.frame(myframe1) # name
#
driver.switch_to.frame(0) # 下标
#
driver.switch_to.frame(driver.find_element_by_xpath(‘//iframe[@id="idframe1"]‘)) # 通过八大定位方式
#
切换完成之后,就是一个新的HTML页面里面的定位
# 定位表达式,页面输入框元素
loc = (By.XPATH, //input[@id="userA"])
WebDriverWait(driver,
30).until(EC.visibility_of_element_located(loc))
# 在窗口输入数据
driver.find_element(*loc).send_keys(切换到iframe内部)
# 查看成果
time.sleep(3)
# 切出来,直接切换到默认的主页面,最外层的HTML页面
driver.switch_to.default_content()
# 切到上一个iframe (多层嵌套)
#
driver.switch_to.parent_frame()

loc
= (By.XPATH, //input[@id="user"])
WebDriverWait(driver,
30).until(EC.visibility_of_element_located(loc))
# 在窗口输入数据
driver.find_element(*loc).send_keys(切换到默认的主页面)
driver.quit()

 

三、alert弹框处理

它不是HTML元素,是js弹框,不能使用F12定位

操作流程:非HTML元素

     使用 alert 类 ,操作元素导致非HTML元素出现

     1、切换到它

     2、将他关闭或其他操作

弹框的四个操作
al.dismiss() # 取消
al.accept() # 确定
print(al.text) # 获取弹出框的文本
send_keys # 弹出框输入

 


from selenium import webdriver
import time
driver
= webdriver.Chrome()
driver.get(
"file:///E:/WebWebpageTest/page.html")
driver.maximize_window()
# 最大化浏览器
# 点击出现非HTML弹出框
driver.find_element_by_id(alert).click()
time.sleep(
1)
# 切换弹框 需要接收返回的对象
al = driver.switch_to.alert
# 弹框的四个操作
print(al.text) # 获取弹出框的文本
#
al.dismiss() # 取消
al.accept() # 确定
#
al.send_keys() # 弹出框输入
#
暂停看操作
time.sleep(1)
driver.quit()

 


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 解决Win10下MySQL连接问题:Navicat 2003无法连接到本地MySQL服务器(10061)
    本文介绍如何在Windows 10环境下解决Navicat 2003无法连接到本地MySQL服务器的问题,包括启动MySQL服务和检查配置文件的方法。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
author-avatar
郭伟健逍遥_308
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有