前言

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中三大切换 三种等待方式相关推荐

  1. selenium中的三种等待方式以及显示等待和隐式等待区别

    selenium的三种等待方式 selenium中一般分为三种等待方式:显示等待.隐式等待.sleep强制等待 1.显示等待(有条件) 程序提前指定等待条件和等待时间,在查找元素时,判断规定时间内是否 ...

  2. selenium中三种等待方式:sleep,implicitly_wait,WebDriverWait

    三种等待方式:sleep 强制等待, sleep,设置等待多长时间,就要等待多长时间.等待完成后,才会继续下一步: from selenium import webdriver # 导入sleep f ...

  3. python的等待代码是什么_Python selenium 三种等待方式详解

    1.目的背景 解决问题:下拉框定位不到.弹框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待. 原因:代码运行速度快,而浏览器加载渲染速度慢 解决办法:加等待,目 ...

  4. python三种等待方式_Python selenium 三种等待方式详解

    本文摘自:http://blog.csdn.net/huilan_same/article/details/52544521 发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很 ...

  5. Python selenium —— 一定要会用selenium的等待,三种等待方式解读

    发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加 ...

  6. Python selenium —— 一定要会用selenium的等待,三种等待方式解

    转自  http://lib.csdn.net/article/48/50937?knId=1313 Python selenium -- 一定要会用selenium的等待,三种等待方式解 发现太多人 ...

  7. Selenuim 三种等待方式解读

    很多情况下写代码时不加等待时间容易出现定位不到元素的情况,可见等待时间的重要性,下面介绍一下selenium的三种等待方式 1.强制等待----sleep() 不管浏览器是否加载完了,程序都得等待所设 ...

  8. 【App自动化测试】(八)三种等待方式——强制等待、隐式等待、显示等待

    目录 1. 为什么要添加等待? 2. 三种等待方式 3. 强制(直接)等待 4. 隐式等待 4.1 隐式等待说明 4.2 隐式等待无法解决的问题 5. 显式等待 5.1 为什么要使用显示等待机制? 5 ...

  9. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

最新文章

  1. Linux下编译软件时指定安装目录的好处
  2. 为何信标无线充电总是烧板子?
  3. python diango_Django 安装
  4. Linux下安装MongoDB3.2.5(自测)
  5. 完整nagios安装最新pnp版绘图-sync模式
  6. 多链NFT市场Polkarare获加密投资机构DFG战略投资
  7. C++ 字节流与二进制字符串相互转换(一个简单的明文加解密程序)
  8. linux 中断程序设计,linux – CPU0被eth1中断淹没
  9. ftp 227 entering passive mode
  10. Sqlmap使用教程【笔记精华整理】
  11. 服务器备案问题解决思考?
  12. 复赛后第一次正经写博客
  13. k8s 安装ingress nginx controller 并部署.net core ingress服务
  14. 带emoji表情的react输入框组件
  15. Launcher进程启动流程
  16. 【论文笔记】基于 VR 的移动机器人真实环境三维建模系统
  17. 第6章第9节:幻灯片背景:使用纹理和图像作为幻灯片的背景 [PowerPoint精美幻灯片实战教程]
  18. WEB渗透之SQL 注入
  19. SSM_jsp实现汽车销售管理系统
  20. 点击编辑框全选内容java,js实现鼠标点击文本框自动选中内容的方法

热门文章

  1. 企业怎样才能有效开展网络推广?
  2. python数据分析怎么画_Python数据分析基础(九) 使用Seaborn绘制图像
  3. proe二次开发vb模式创建参数示例
  4. Iterator 详解
  5. 基于HTML+css+js设计简易的汽车用户注册界面
  6. java的交集、并集和差集
  7. vscode远程连接服务器+上下传文件
  8. ubuntu内核切换操作说明
  9. ZigBee组网从未如此简单!
  10. ECshop 每个数据库表结构说明