热门标签 | 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()

 


推荐阅读
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • ajaxfileupload.js 兼容ie9,10
    在使用ajaxfileupload.js上传文件时,ie9和ie10会报INVALID_CHARACTER_ERR(5)的错误,导致无法上传成功;网上查了一系列处理方式:如:把代码 ... [详细]
  • Ifyouaretryingtostopthesessionfromtimeingoutallthetimeyoucandothisratherthanincreasingthes ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 简答题(每题5分):1、label标签是什么,for和accesskey属性有什么用?label标签是一种常见 ... [详细]
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社区 版权所有