selenium 多窗口处理与网页frame
多窗口处理
点击某些链接,会重新打开一个窗口,对于这种情况。想在薪页面操作,就得先切换窗口了。
获取窗口得唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面进行操作了
1、 先获取到当前得窗口句柄(drive.current_window_handle)
2、 再获取到所有得窗口句柄(drive.window_handles)
3、 判断是否是想要操作得窗口,如果是,就可以对窗口进行操作,如果不是。就跳转到另外一个窗口,对另一个操作进行操作(drive.switch_to_window)
Demo
操作步骤
1、打开百度,
2、点击登录
3、在弹出框点击注册账号
4、跳到注册账号页,输入用户名和账号
5、返回第一个登录页
6、在登录页输入账号密码,点击登录
import pytest
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import TouchActions
class TestActions:
def setup(self):
self.chrome_options = Options()
self.chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") # 指定配置好的 chrom
self.chrome_options.add_experimental_option("w3c", False)
self.chrome_driver = r"./chromedriver.exe" # 驱动路径
self.driver = webdriver.Chrome(self.chrome_driver, chrome_options=self.chrome_options) # 加入驱动设置
# self.driver.get('https://sahitest.com/demo/clicks.htm') # 发起请求
# self.driver.maximize_window() # 设置为最大化
self.driver.implicitly_wait(3) # 添加一个隐式等待默认等待3秒
def teardown(self):
print('关闭浏览器')
# time.sleep(1)
# self.driver.quit()
def test_login(self):
url = 'https://www.baidu.com/'
self.driver.get(url) # 发起请求
self.driver.find_element_by_xpath("//a[@id='s-top-loginbtn']").click() # 点击登录
self.driver.find_element_by_xpath("//a[contains(text(),'立即注册')]").click() # 点击立即注册
print(self.driver.window_handles) # 查看目前有几个页面
window1 = self.driver.current_window_handle # 目前选中得页面
self.driver.switch_to_window(self.driver.window_handles[-1])
window2 = self.driver.current_window_handle # 选择新打开得页面
print(window2, window1)
# 在第二个页面输入账号密码
self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__userName']").send_keys('1311111')
self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__phone']").send_keys('1311111')
# 返回第一个页面,然后点击立即登录
self.driver.switch_to_window(window1) # 因为上面步骤已经将window1记录了下来,所以可以直接选择window1
self.driver.find_element_by_xpath("//p[@id='TANGRAM__PSP_11__footerULoginBtn']").click() # 点击登录
self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_11__userName']").send_keys("lakes") # 输入账号
self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_11__password']").send_keys("lakes") # 输入密码
self.driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_11__submit']").click() # 点击登录
if __name__ == '__main__':
pytest.main(['-vs', "test_action.py::TestActions"])
frame的处理
在web自动化中,如果一个元素定位不到,那么很大可能这个元素在iframe中
Frame分类
标签主要表现为 : frameset、frame、 iframe 三种
frame 存在两种
- 一种是嵌套的,一种是未嵌套的
切换嵌套的frame
- driver.switch_to.frame() # 根据元素id或者index 切换成frame
- driver.switch_to.default_content() # 切换到默认的frame
- driver.stitch_to.parent_frame() # 切换到父级frame
切换未嵌套的frame
- driver.switch_to_frame("frame的id")
- driver.switch_to_frame("frame-index") frame无id的时候要根据索引来处理,索引从0开始 driver.switch_to_frame(0)
用法:
切换到所在的frame, 就可以通过selenium的定位定位到
selenium 多窗口处理与网页frame的更多相关文章
- Python3 Selenium多窗口切换
Python3 Selenium多窗口切换 以腾讯网(http://www.qq.com/)为例,打开腾讯网,点击新闻,打开腾讯新闻,点击新闻中第一个新闻链接. 在WebDriver中封装了获取当前窗 ...
- scrapy和selenium结合抓取动态网页
1.安装python (我用的是2.7版本的) 2.安装scrapy: 详情请参考 http://blog.csdn.net/wukaibo1986/article/details/8167590 ...
- Python+Selenium学习--窗口切换及操作元素
场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...
- selenium webdriver窗口切换(上)
selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test201 ...
- python3 + selenium 之窗口切换
窗口切换 此代码来源学习后对淘宝操作实践记录: 以下代码在Chrome61和IE11上正常运行,Firefox5.7上运行存在一些问题须改进,应该是火狐不兼容差link_text部分和循环经常报错,在 ...
- selenium 多窗口(windows)及ITargetLocator使用总结
1. selenium能实现窗口切换的原理 2. 常见命令 2.1 WindowHandle 2.2 WindowHandles 2.3 SwitchTo 3. 使用JavaScript新建窗口 4. ...
- selenium切换窗口
在做网页自动化测试的时候,难免会打开很多个网页,那么,如何在多个窗口之间切换呢? 获取窗口的唯一标识用句柄(handle)表示,因此只需要切换句柄,就可以灵活的在各窗口之间切换. 下面介绍几个方法 c ...
- 爬虫-----selenium模块自动爬取网页资源
selenium介绍与使用 1 selenium介绍 什么是selenium?selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作. sel ...
- 自动化测试基础篇--Selenium多窗口、句柄问题
摘自https://www.cnblogs.com/sanzangTst/p/7680402.html 有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开 ...
- selenium webdriver窗口切换(下)
多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...
随机推荐
- 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1
外部振荡器引脚OSC_IN/OSC_OUT可以用做GPIO的PD0/PD1,通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现.这个重映射只适用于36. 48和64脚的封装(100脚和 ...
- boost编译指定python版本号
1.执行如下 bootstrap 语句,会在目录下生成 project-config.jam 文件 .\bootstrap --with-python="C:\Users\yzy\Anaco ...
- Nacos 实现 AP+CP原理[Raft 算法 NO]
来源于网络 一.什么是 Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它.为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导 ...
- 动手造轮子自己实现人工智能神经网络(ANN),解决鸢尾花分类问题Golang1.18实现
人工智能神经网络( Artificial Neural Network,又称为ANN)是一种由人工神经元组成的网络结构,神经网络结构是所有机器学习的基本结构,换句话说,无论是深度学习还是强化学习都是基 ...
- 机器学习算法(八):基于BP神经网络的乳腺癌的分类预测
机器学习算法(八):基于BP神经网络的乳腺癌的分类预测 1.算法简介和应用 1.1 算法简介 BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学 ...
- 使用golang+antlr4构建一个自己的语言解析器(完结篇)
Goland 中Antlr4插件 在goland中安装Antlr4插件,用于识别输入的字符在在语法文件中生成的语法树的样子,大概就是如下的摸样 下载步骤: 1.点击文件中的设置选项 2.在插件目录下输 ...
- vue中新的状态管理器-pinia
背景 对于pinia的使用,可参考官方文档在这不做过多赘述.这边主要来讲讲pinia中 少用且好用的方法,为什么我们选择pinia而不用vuex ps: 以下写法全部基于组合式API 使用方式: 先下 ...
- vue cli3中配置生产环境、开发环境、测试环境
首先在packjson中配置 "scripts": { "serve": "vue-cli-service serve", //调用开发ap ...
- opencv-python 4.9.2. 轮廓特征
矩 图像的矩可帮助你计算某些特征,如对象的质心,对象的面积等特征.函数cv.moments()给出了计算的所有矩值的字典. 从这一刻起,你可以提取有用的数据,如面积,质心等.质心由关系给出, $$ C ...
- Windows Powershell无法切换anaconda的问题
前言 近期做大创发现power shell启动以后activate环境之后没有反应,遂进行如下操作 启用默认配置 使用管理员模式打开Powershell 输入conda init powershell ...