首页 > 其他分享 >web自动化——Selenium 之切换

web自动化——Selenium 之切换

时间:2024-03-01 20:55:38浏览次数:40  
标签:web Selenium driver alert switch 切换 iframe 句柄

一、窗口(window)切换

  在浏览器当中,如果在页面进行了某个操作,结果浏览器打开了另外一个新窗口(tab)。如果要操作新窗口当中的页面元素,就需要窗口切换。

  前提:有新的窗口打开、或者你要操作其它窗口

  1、sleep(1)或显示等待 -- 等待浏览器新的窗口出现(无法使用隐性等待,隐性等待只能用于找元素)

  2、先获取当前会话浏览器的,所有窗口。句柄(窗口唯一标识)

    所有窗口句柄 = driver.window_handles    #是个列表

    句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。所以新窗口是列表的最后一个!

  3、切换到指定的窗口

    driver.switch_to.window(窗口的句柄)

#方式一:用sleep等待
sleep(1) #等待新窗口出现
# ========== 浏览器打开了另外一个新窗口 ===========
# 获取所有窗口句柄。句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。
wins = driver.window_handles
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
#方式二:用显性等待
# 获取当前的窗口句柄
wins = driver.window_handles

# === 打开新的窗口 ===
driver.find_element(By.XPATH, '//div[@id="1"]//a').click()

# ========== 浏览器打开了另外一个新窗口 2===========
# 要传一个当前的句柄列表。等待新窗口出现.
wait = WebDriverWait(driver,30)
wait.until(EC.new_window_is_opened(wins)) #new_window_is_opened新的窗口打开,逻辑是点击后的句柄数若大于点击之前的句柄数,那就表示有新窗口打开
# 取最新打开的窗口
new_wins = driver.window_handles
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])

二、iframe切换

  iframe:html当中内嵌了另外一个html。

  当页面中包含iframe时,不能直接操作iframe中的元素,需要先切换进iframe才行

  2.1、iframe切换

    1)要判断你要操作的元素,是否在iframe当中

      F12当中定位元素后,去看它的绝对路径当中是否有2个或2个以上的html。

    2)如果要操作iframe当中的元素,则必须切换到iframe当中。若有多层iframe,一层一层切入

      driver.switch_to.frame(iframe的元素识别策略)

driver.switch_to.frame("frameforlogin")

    3)如果要从iframe当中退出来

driver.switch_to.default_content()

    4)切换回上一层

driver.switch_to.parent_frame()

  2.2、iframe识别策略

    1)index(下标):整个页面所有的iframe当中,当前要切换的iframe的下标。从0开始

driver.switch_to.frame(1)

    2)name属性:driver.switch_to.frame(iframe name属性名)

driver.switch_to.frame("frameforlogin")

    3)webelement对象:通过find_element获得元素的webelement对象

driver.switch_to.frame(driver.find_element(By.ID,"frameforlogin"))

三、alert弹出框切换

  WebDriver提供了一个API,用于处理JavaScript提供的三种类型的原生弹窗消息。

  页面的弹出框2种:

  1)右键元素定位

  2)js弹框 -- 由页面操作触发的

  3.1、三种alert弹窗

    1)Alerts警告框

    https://www.w3school.com.cn/tiy/t.asp?f=hdom_alert

    2)confirm确认框,与警告框不同,确认框还有取消按钮

    https://www.w3school.com.cn/tiy/t.asp?f=hdom_confirm

    3)prompt提示框,还可以输入文本

    https://www.w3school.com.cn/tiy/t.asp?f=hdom_prompt

  3.2、切换进入Alert

driver.switch_to.alert

  3.3、Alert类

    1)accept() :确定

    如果有多个弹窗,可以点多次确定或取消

# 切换到alert
alert = driver.switch_to.alert
#确定
alert.accept()

    2)dismiss() :取消

# 切换到alert
alert = driver.switch_to.alert
#取消
alert.dismiss()

    3)send_keys():输入

    如果有默认输入内容,输入的内容会覆盖默认内容

# 切换到alert
alert = driver.switch_to.alert
# 在弹出框当中输入文本内容
alert.send_keys("hello selenium")
# 确定
alert.accept()

    4)text:获取当前弹框的文本内容

四、selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?

参考:https://www.cnblogs.com/Simple-Small/p/12486621.html

标签:web,Selenium,driver,alert,switch,切换,iframe,句柄
From: https://www.cnblogs.com/mango-93/p/18047308

相关文章

  • zabbix-server启动后没有10051端口,web端报错
    1、登入zabbixweb端,报错信息如下 2、登入服务器上查看zabbix-server、zabbix-agent2、apache2等服务都正常运行 3、检查端口情况,发现apache2---80正常、zabbix-agent2---10050正常,只有zabbix-server没有端口信息(图一也是细节那栏也没有localhost:10051) 4、查看zab......
  • selenium——模拟qq空间登录
    fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.common.byimportByfromtimeimportsleepweb_driver=webdriver.Chrome()web_driver.get("https://qzone.qq.com/")#切换作用域web_driver.switch_to......
  • Taurus.MVC WebMVC 入门开发教程6:路由配置与路由映射
    前言:在本篇Taurus.MVCWebMVC入门开发教程的第六篇文章中,我们将讨论如何配置路由并映射到控制器和操作方法。路由是决定应用程序如何响应客户端请求的重要组成部分,因此在Web开发中非常重要。我们将继续使用Taurus.Mvc命名空间,并探讨如何在应用程序中配置路由。步骤1:了......
  • 拯救php性能的神器webman-初入门
    无意间发现的这个神器webman,真是秋名山上的腾源拓海!该框架是workerman下的一个web开发的生态,我们可以先看看这里workerman的官方网站。workerman早有耳闻,知道它蛮厉害的,跟swoole也不相上下,这次主要是说webman,可以看这里 话不多说,赶紧上手。1.安装这个安装真的很简单,就一......
  • webpack5多入口的时候HtmlWebpackPlugin怎么处理多个html文件
    constHtmlWebpackPlugin=require('html-webpack-plugin');module.exports={entry:{app1:'./src/app1.js',app2:'./src/app2.js'},output:{filename:'[name].bundle.js',path:path.resolve......
  • selenium处理iframe
    -如果定位的标签在iframe中,需要先切换到iframe中-切换到iframe:driver.switch_to.frame('iframe的id属性值')-动作链(拖动):fromselenium.webdriverimportActionChains-实例化一个动作链对象-执行一系列的动作链操作-调用perform()方法执行链中的所......
  • selenium
    笔记selenium模块的基本使用问题:selenium模块和爬虫之间具有怎样的关联-便捷的获取网站中动态加载的数据-便捷实现模拟登录什么是selenium模块?-基于浏览器自动化的一个模块selenium使用流程:-环境的安装pipinstallselenium-下载一个浏览器的......
  • web前端基础
    软件架构体系:C/S:client/Server客户端/服务端QQ,酷狗,爱奇艺,王者荣耀等3D游戏B/S:browser/Server浏览器/服务端百度/淘宝/京东/网页版的爱奇艺/基于web前端技术实现的一些手机APP[例如:百度地图、喜马拉雅、消消乐、斗地主]web前端技术其是基于浏览器实现客户端的一套......
  • Day00----Web前端基础
    1,什么是Web前端技术?Web前端技术是基于浏览器实现客户端的一套综合技术,包括了HTML,CSS,Javascript等。UI客户端技术是基于UI模块实现客户端的一种UI模块+打包模块,包括了Pygame,pyqt5,Tkinter,wxPython,PyGUI等结合pyinstaller.2,发展历史Linux-->90年-->GUNLinux美苏冷战(2极争......
  • Vue CLI 系列之(十)webStorage
    webStorage【浏览器本地存储】localStorage和sessionStorage统称为webStorage1.localStorage未登录账号的情况下进行了商品搜索,搜索历史中保存了之前的搜索记录借助浏览器的本地存储可以将数据存到硬盘上,用于缓存数据通过浏览器如何查看浏览器本地存储​ 每个网站都有自己......