如何解决Selenium句柄、多窗口问题

有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开一个新标签页面,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

一、认识多窗口

1、这里以赶集网为例,打开赶集网http://cd.ganji.com/,点击工作,就会发现会重新打开一个窗口;

image

二、获取当前窗口句柄

1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。

2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。

3.获取当前页面的句柄:browser.current_window_handle

image

4.执行结果

image

三、获取所有窗口句柄

1、获取所有窗口句柄:brows.window_handles

image

2、执行结果

image

四、切换句柄

方法一:

1.循环判断是否与首页句柄相等;

2.如果不等,说明是新页面的句柄;

3.获取的新页面句柄后,可以切换到新打开的页面上;

4.打印新页面的title,看是否切换成功。

image

执行结果

image

方法二:

直接获取all_h这个list数据里面第二个hand的值:all_h[i]

image

执行结果

image

五、关闭新窗口,返回到原来的窗口

1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证;

2.验证完后切关闭新窗口;

3.切回句柄到首页;

4.打印当前页面的句柄,看是否切换到首页了。

image

执行结果

image

六、参考代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : handles.py
# @Software: PyCharm
import time
from selenium import webdriver
url = ‘http://cd.ganji.com/‘
browser = webdriver.Firefox()
browser.get(url)
time.sleep(5)
# 获取当前页面的窗口句柄
handle = browser.current_window_handle
print(handle)
# 获取所有窗口句柄
browser.find_element_by_link_text(‘成都招聘‘).click()
handles = browser.window_handles
print(handles)
# 方法一:判断句柄是否与首页相等
for i in handles:
    if i != handle:
        browser.switch_to.window(i)
        print(browser.title)
        browser.close()
        browser.switch_to.window(handle)
        print(browser.title)
# 方法二:直接获取list列表里面的值,取值handles[i]
# browser.switch_to.window(handles[0])
# print(browser.title)
# 退出
browser.quit()

原文地址:https://www.cnblogs.com/jiachangwei/p/12148409.html

时间: 2024-10-28 18:39:19

如何解决Selenium句柄、多窗口问题的相关文章

mfc解决回车键默认关闭窗口的一般方法

mfc解决回车键默认关闭窗口的一般方法 在一般情况下编写的对话框程序,用户在运行的时候,如果不注意按下了ENTER或者ESC键,程序就会立刻退出,之所以会这样,是因为按下Enter键时,Windows就会自动去找输入焦点落在了哪一个按钮上,当获得焦点的按钮的四周将被点线矩形包围.如果所有按钮都没有获得输入焦点,Windows 就会自动去寻找程序或资源所指定的默认按钮(默认按钮边框较粗).如果对话框没有默认按钮,那么即使对话框中没有OK按钮,OnOK函数也会自动被调用,对于一个普通的对话框程序来说

解决selenium自动化上传图片或文件出现windows窗口问题

在实际工作中,会经常遇到上传图片或文件的操作,有的是input标签的,有的是非input标签属性的.他们都有一个共同的特性会出现windows的弹出窗. 下面说下出现windows的弹出窗后怎么解决:总共2个步骤 1,首先点击打开,待出现选择文件的弹出窗后: 2,调用我下面这个函数: 提示:调用此方法需要在打开windows上传文件的系统窗口后再调用 (该方法适用于谷歌驱动) '''实现非input标签上传文件,调用此方法需要打开windows上传文件的系统窗口再调用''' import win

【selenium自动化——多窗口处理】

要想在多个窗口之间切换,首先要获得每一个窗口的唯一标识符号(句柄).通过获得的句柄来区别分不同的窗口,从而对不同窗口上的元素进行操作. 代码示例: #coding=utf-8from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://www.baidu.com/") #获得当前窗口nowhandle=driver.current_window_handle #打开注册新窗

TeamCity编译执行selenium上传窗口脚本缺陷

TeamCity编译selenium脚本,对于上传窗口处理只支持sendKeys的使用,不支持模拟人为按下Enter键和使用autoIt等操作,即使本地调试通过的脚本,提交编译执行后,也是报错,原因是teamCity编译执行脚本的过程中,只是后台启动相应浏览器的driver,没有真实打开一个浏览器导致的.发现这个缺陷还得从编写上传课件测试用例脚本说起. 一个上传课程测试用例,功能测试是,填写课程的基本信息后,上传课程的图片,如图1,图片上传成功后,系统会提示“图片上传成功”,然后点击[选择]按钮

selenium 2 + python 窗口定位

在使用selenium 2的时候,经常会碰到打开一个页面后新页面以新窗口打开,因为脱离当前窗口需要重新定位窗口,可以用以下方法定位到需要的窗口. #父窗口是0 browser.switch_to_window(browser.window_handles[1])

python selenium无法最大化窗口

问题原因:报错提示cannot get automation extension根据各种调试,发现是对应版本不对,上图发现selenium的版本是57.0.2987.133,需要driver为2.29以上的.而当前driver的版本为2.27,所以就会报错. 解决方法:替换上最新版本的driver即可

如何解决Selenium IDE与Firefox的不兼容问题?

信心满满的在firefox上安装Selenium IDE,结果页面提示"version not compatible",解决方法来了. Selenium IDE的更新速度远远没有Firefox快,所以唯一的方法就是降低Firefox版本. 现在最新的Selenium IDE版本是V2.9.1(下载方法:火狐浏览器打开https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/,点击Add  to Firefox即可) Fire

在解决selenium grid报错时出现tomcat启动不起来项目的问题:java.lang.UnsatisfiedLinkError:

之前.只配置了root权限的jdk启动好使, 但在修复selenium grid远程驱动后启动tomcat,报如上错误 解决办法:在启动tomcat的用户下编辑环境变量添加jdk: export JAVA_HOME=/home/web1/jdk1.7.0_79/ export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 解决成功:perfect 原文地址:h

python selenium打开新窗口,多窗口切换

from selenium import webdriver browser=webdriver.Firefox() browser.maximize_window() browser.get('https://www.baidu.com') js='window.open("https://www.sogou.com");' browser.execute_script(js) print browser.current_window_handle # 输出当前窗口句柄(百度) ha