selenium中三大切换 三种等待方式
前言
ui自动化测试,就是通过代码模拟手工操作,通过点击、拖拽、输入等方式,进行浏览器页面的操作,我们常用的web自动化测试工具,是selenium;同时在我们日常操作中,由于需要创建链接,加载页面,切换窗口等各情况,但是代码的执行是非常快的,我们怎么样才能实现我们需要的操作呢,此时,就需通过切换、等待等方式进行操作了。
一、selenium的三大切换
三大切换,包含三种切换方式:窗口切换,iframe切换、alert弹框切换
1、窗口切换
获取当前句柄 driver.current_window_handle
获取当前所有窗口句柄 driver.window_handles
切换至最新的窗口 driver.switch_to.window(driver.window_handles[-1])
切换至第一各窗口 driver.switch_to.window(driver.window_handles[0])
# 窗口切换from selenium import webdriverdriver = webdriver.Chrome() # 获取浏览器
driver.implicitly_wait(10) # 隐形等待,等待元素加载
driver.get('http://www.baidu.com') # 访问url地址elem = driver.find_element('id','kw') # 元素定位
elem.send_keys('haha') # 输入
elem.submit() # 提交driver.find_element_by_partial_link_text('百度翻译').click()
print(driver.window_handles) # 获取所有窗口句柄
print(driver.current_window_handle) # 获取当前窗口句柄driver.switch_to.window(driver.window_handles[-1]) # 切换至最新的窗口
time.sleep(2)
print(driver.current_window_handle) # 获取当前窗口句柄
print(driver.title) # 打印浏览器标题
2、iframe切换
怎么判断自己处于iframe界面呢,通过F12,ctrl + F,进行编写xpath表达式,确定表达式时唯一的,但是还是无法成功获取元素, 此时通过查看你要定位的元素上下,是否有iframe的字眼,以确认:
iframe基本操作有三种方式:
1)通过index索引获取 driver.switch_to.frame(0)
2)如有name元素,通过name元素获取,直接传入值即可 driver.switch_to.frame("iframeResult")
3)通过iframe WebElement获取 locator=['id','kw']driver.switch_to.frame(locator)
# iframe切换from selenium import webdriverdriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://www.csdn.net/')
driver.switch_to.frame(0) # 切换至iframe
elem = driver.find_element('xpath',"//div[@id='app']//div[@id='7574']") # 在iframe中进行元素定位
print(elem)
3、alert弹框切换
my_alert = driver.switch_to.alert
my_alert.accept() # 确认
my_alert.dismiss() # 取消
elem = driver.find_element('xpath','//h2')
elem.click()
my_alert = driver.switch_to.alert # 切换至alert弹框
my_alert.accept() # 确认
my_alert.dismiss() # 取消
elem1 = driver.find_element('id','kw') # 操作完alert弹框后,再进行元素定位
二、selenium的三种等待方式
1、强制等待(硬性等待)
强制等待 n 秒钟,每用一次就添加一次
time.sleep(2)
2、隐形等待(智能等待)
单位为s,表在 n 秒内以最快的速度返回,但只能用来等待元素,启动浏览器后,只需设置一次
driver.implicity_wait(10)
3、显性等待
每用一次就需启动一次,不仅可等待元素,还可其他等待,超时每找到,会报错。另外,等待时间是死的,一般可被time.sleep(2)取代,
wait = WebDriverWait(driver,10)
wait.until(expected_conditions.title_contains('xxx')) # 等待直到标题包含xxxlocator = ['id','kw']
elem = wait.until(expected_conditions.element_to_be_clickable(locator)) # 等待元素可被点击
elem = wait.until(expected_conditions.presence_of_element_located(locator)) # 等待某个元素加载
elem = wait.until(expected_conditions.visibility_of_element_located(locator)) # 等待元素可被看见
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditionsdriver = webdriver.Chrome()
driver.implicitly_wait(10) # 隐性等待,在10s内以最快的速度返回结果,但只能等待元素,全局设置一次
driver.get('http://www.baidu.com')elem = driver.find_element('id','kw')
elem.send_keys('haha')
elem.submit()
# time.sleep(3) # 强制等待,必须等三秒钟
# print(driver.title) # 还没加载完成,无法定位到我们想要的页面元素,此项需要用等待
# driver.quit()wait = WebDriverWait(driver,10) # 显性等待,等待条件,直到标题中包含‘haha’文本
wait.until(expected_conditions.title_contains('haha'))
print(driver.title)
driver.quit()
三、selenium的三大切换等待方式
1、窗口切换等待
wait = WebDriverWait(driver,4) # 初始化等待器
all_handles = driver.window_handles # 获取点击前的所有窗口
wait.until(expected_conditions.new_window_is_opened(all_handles)) # 通过显性等待,等待新窗口出现
driver.switch_to.window(driver.window_handles[-1]) # 需手动切换至最新窗口
# 窗口切换等待from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
import timedriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
elem = driver.find_element('id','kw')
elem.send_keys('haha')
elem.submit()all_handles = driver.window_handles # 获取点击前的所有窗口
driver.find_element_by_partial_link_text('百度翻译').click()
wait = WebDriverWait(driver,2)
wait.until(expected_conditions.new_window_is_opened(all_handles)) # 通过显性等待,等待新窗口出现
driver.switch_to.window(driver.window_handles[-1]) # 切换至最新窗口
time.sleep(2)
print(driver.title)
2、iframe切换等待
wait = WebDriverWait(driver,4) # 初始化等待器
wait.until(expected_conditions.frame_to_be_available_and_switch_to_it(0)) # 等待并自动切换至iframe
# iframe切换
from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://www.csdn.net/')wait = WebDriverWait(driver,4)
wait.until(expected_conditions.frame_to_be_available_and_switch_to_it(0)) # 等待并切换至iframe
elem = driver.find_element('xpath',"//div[@id='app']//div[@id='7574']")
print(elem)
3、alert切换等待
wait = WebDriverWait(driver,4) # 初始化等待器
wait.until(expected_conditions.alert_is_present()) # 等待并自动切换至iframe
总结
以上为三大切换和三大等待的简单操作,了解的比较片面,先记录至此。
最近心情:
感觉每天都在等等等,真的感觉好无谓啊,哎,讨厌现在的自己,快点解决、结束现在的情景吧,赶紧调整心态,fighting!!
完结,撒花花花花花花花~~~!!!!!!
selenium中三大切换 三种等待方式相关推荐
- selenium中的三种等待方式以及显示等待和隐式等待区别
selenium的三种等待方式 selenium中一般分为三种等待方式:显示等待.隐式等待.sleep强制等待 1.显示等待(有条件) 程序提前指定等待条件和等待时间,在查找元素时,判断规定时间内是否 ...
- selenium中三种等待方式:sleep,implicitly_wait,WebDriverWait
三种等待方式:sleep 强制等待, sleep,设置等待多长时间,就要等待多长时间.等待完成后,才会继续下一步: from selenium import webdriver # 导入sleep f ...
- python的等待代码是什么_Python selenium 三种等待方式详解
1.目的背景 解决问题:下拉框定位不到.弹框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待. 原因:代码运行速度快,而浏览器加载渲染速度慢 解决办法:加等待,目 ...
- python三种等待方式_Python selenium 三种等待方式详解
本文摘自:http://blog.csdn.net/huilan_same/article/details/52544521 发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很 ...
- Python selenium —— 一定要会用selenium的等待,三种等待方式解读
发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加 ...
- Python selenium —— 一定要会用selenium的等待,三种等待方式解
转自 http://lib.csdn.net/article/48/50937?knId=1313 Python selenium -- 一定要会用selenium的等待,三种等待方式解 发现太多人 ...
- Selenuim 三种等待方式解读
很多情况下写代码时不加等待时间容易出现定位不到元素的情况,可见等待时间的重要性,下面介绍一下selenium的三种等待方式 1.强制等待----sleep() 不管浏览器是否加载完了,程序都得等待所设 ...
- 【App自动化测试】(八)三种等待方式——强制等待、隐式等待、显示等待
目录 1. 为什么要添加等待? 2. 三种等待方式 3. 强制(直接)等待 4. 隐式等待 4.1 隐式等待说明 4.2 隐式等待无法解决的问题 5. 显式等待 5.1 为什么要使用显示等待机制? 5 ...
- java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...
java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...
最新文章
- Linux下编译软件时指定安装目录的好处
- 为何信标无线充电总是烧板子?
- python diango_Django 安装
- Linux下安装MongoDB3.2.5(自测)
- 完整nagios安装最新pnp版绘图-sync模式
- 多链NFT市场Polkarare获加密投资机构DFG战略投资
- C++ 字节流与二进制字符串相互转换(一个简单的明文加解密程序)
- linux 中断程序设计,linux – CPU0被eth1中断淹没
- ftp 227 entering passive mode
- Sqlmap使用教程【笔记精华整理】
- 服务器备案问题解决思考?
- 复赛后第一次正经写博客
- k8s 安装ingress nginx controller 并部署.net core ingress服务
- 带emoji表情的react输入框组件
- Launcher进程启动流程
- 【论文笔记】基于 VR 的移动机器人真实环境三维建模系统
- 第6章第9节:幻灯片背景:使用纹理和图像作为幻灯片的背景 [PowerPoint精美幻灯片实战教程]
- WEB渗透之SQL 注入
- SSM_jsp实现汽车销售管理系统
- 点击编辑框全选内容java,js实现鼠标点击文本框自动选中内容的方法