失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 自动化测试——多窗口切换和切换frame

自动化测试——多窗口切换和切换frame

时间:2022-01-16 16:03:25

相关推荐

自动化测试——多窗口切换和切换frame

这里写目录标题

一、多窗口切换1、base.py:公共代码2、切换句柄的方式1,通过for循环3、切换句柄的方式2,通过索引切换4、源代码 二、frame窗口1、什么是frame?2、Frame 分类3、判断要定位的元素在不在frame中两种方式方式一:鼠标选中要定位的元素,底部如果能看到iframe的字样,说明在frame中方式二:鼠标选中要定位的元素,向上查是否存在iframe标签 4、切换未嵌套的iframea、使用iframe中的id属性来切换frameb、依据索引来切换frame 5、切换嵌套的iframe

一、多窗口切换

获取当前的窗口句柄:driver.current_window_handles

所有的窗口句柄:driver.window_handles

切换窗口:driver.switch_to.window()

1、base.py:公共代码

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : /2/23 11:18# @Author : 杜兰特# @File : base.pyimport sysimport timefrom selenium import webdriverfrom mon.by import Byfrom mon.action_chains import ActionChainsfrom mon.keys import Keysclass Base:def setup_class(self):self.driver=webdriver.Chrome()self.driver.implicitly_wait(3)self.driver.maximize_window()def teardown(self):self.driver.quit()

继承Base仍然先执行setup_class

最后执行test_down()

2、切换句柄的方式1,通过for循环

for item in window_handles:if item != self.driver.current_window_handle:self.driver.switch_to.window(item)

3、切换句柄的方式2,通过索引切换

self.driver.switch_to.window(window_handles[-1])

4、源代码

import sysimport timefrom selenium import webdriverfrom mon.by import Byfrom mon.action_chains import ActionChainsfrom mon.keys import Keysfrom .base import Baseclass TestSwitchWindow(Base):#继承Base仍然先执行setup_class#最后执行test_down()def test_switch_window(self):self.driver.get('')self.driver.find_element(By.XPATH,'//a[text()="新闻"]').click()window_handles=self.driver.window_handles#切换到最新的窗口self.driver.switch_to.window(window_handles[-1])time.sleep(5)#按照坐标的形式,滑动到指定的位置ActionChains(self.driver).scroll_by_amount(0,3000).perform()time.sleep(3)#再切换到最新的窗口self.driver.switch_to.window(window_handles[0])time.sleep(3)#文本框中输入文字666self.driver.find_element(By.CSS_SELECTOR,'.s_ipt').send_keys('666')time.sleep(3)

二、frame窗口

在web自动化中,如果一个元素定位不到,那么很大可能是在iframe中。

1、什么是frame?

frame是html中的框架,在html中,所谓的框架就是可以在同一个浏览器中显示不止一个页面。

基于html的框架,又分为垂直框架和水平框架

2、Frame 分类

frame标签包含frameset、frame、iframe三种,

frameset和普通的标签一样,不会影响正常的定位,可以使用index、id、name、webelement任意种方式定位

frame。

而frame与iframe对selenium定位而言是一样的。selenium有一组方法对frame进行操作

frame存在两种:一种是嵌套的,一种是非嵌套的。

3、判断要定位的元素在不在frame中两种方式

方式一:鼠标选中要定位的元素,底部如果能看到iframe的字样,说明在frame中

方式二:鼠标选中要定位的元素,向上查是否存在iframe标签

4、切换未嵌套的iframe

driver.switch_to.frame(‘frame的id’):按照frame中的id属性切换frame

driver.switch_to_frame(‘frame-index’):frame无ID的时候依据索引来处理,

索引从0开始driver.switch_to_frame(0)

a、使用iframe中的id属性来切换frame

import sysimport timefrom selenium import webdriverfrom mon.by import Byfrom mon.action_chains import ActionChainsfrom mon.keys import Keysfrom .base import Baseclass TestSwitchWindow(Base):#继承Base仍然先执行setup_class#最后执行test_down()def test_switch_frame(self):self.driver.get('/try/try.php?filename=jqueryui-api-droppable')ele=self.driver.find_element(By.ID,'iframeResult')self.driver.switch_to.frame(ele)self.driver.find_element(By.XPATH,'//div[text()="请拖拽我!"]')self.driver.switch_to.parent_frame()self.driver.find_element(By.XPATH,'//button[contains(text(),"点击运行")]')time.sleep(3)

b、依据索引来切换frame

import sysimport timefrom selenium import webdriverfrom mon.by import Byfrom mon.action_chains import ActionChainsfrom mon.keys import Keysfrom .base import Baseclass TestSwitchWindow(Base):#继承Base仍然先执行setup_class#最后执行test_down()def test_switch_frame1(self):self.driver.get('/try/try.php?filename=jqueryui-api-droppable')self.driver.switch_to.frame(0)self.driver.find_element(By.XPATH,'//div[text()="请拖拽我!"]')self.driver.switch_to.parent_frame()self.driver.find_element(By.XPATH,'//button[contains(text(),"点击运行")]')time.sleep(3)

5、切换嵌套的iframe

对于嵌套的先进入到iframe的父节点,再进入子节点,然后可以对子节点里面的对象进行处理和操作

driver.switch_to.frame(‘父节点’)

driver.switch_to.frame(‘子节点’)

在一个iframe中,如果还嵌套了另一个iframe

进入:一个一个的进,先进第一层的iframe,一层一层的进

如果出呢:一层一层的出

如果觉得《自动化测试——多窗口切换和切换frame》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。