Switch

我们在UI自动化测试时,总会出现新建一个tab页面,弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了。需要用到Selenium单独的模块switch_to模块

引用路径:

# 第一种方式可以通过直接导入SwitchTo模块来进行操作
from selenium.webdriver.remote.remote.switch_to import SwitchTo # 第二种方式是直接通过Webdriver的switch_to来操作
driver.switch_to

webdriver在以前的版本中已经为我们封装好了切换Windows,alert,iframe,现在依然可以使用,但是会被打上横线,代表他已经过时了,建议使用SwitchTo类来进行操作。

SwitchToWindows

handles=driver.window_handles
# SwitchToWindows接受浏览器TAB的句柄
driver.sitch_to.windows(handles[1])
#获取当前的tab名称
# handle=driver.current_window_handle
# print(handle)
#获取所有tab名称
driver.find_element_by_css_selector('[href="/new-index/"]').click()
handles=driver.window_handles
print(handles)
#切换tab页面
driver.switch_to.window(handles[1])
#验证是否正确切换到第二个页面上
driver.find_element_by_css_selector('#newtag').send_keys(1111)

SwitchToFrame

#SwichToFrame支持id,name,frame的element
# 接受定位到的iframe的Element,这样就可以通过任意一种定位方式进行定位了
frameElement = driver.find_element_by_name('top-frame')
driver.switch_to.frame(frameElement) # 通过fame的name、id属性定位
driver.switch_to.frame('top-frame') # 当存在多层iframe嵌套时,需要一层一层的切换查找,否则将无法找到
driver.switch_to.frame('top-frame')
driver.switch_to.frame('baidu-frame') # 跳转到最外层的页面
driver.switch_to.default_content() # 多层Iframe时,跳转到上一层的iframe中
driver.switch_to.parent_frame()
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/uitester/")
driver.maximize_window()#将窗口放大
driver.execute_script('window.scrollTo(0,0);')
#切换iframe
# driver.switch_to.frame('top-frame')
iframe=driver.find_element_by_css_selector('iframe[src="/new-index/"]')
driver.switch_to.frame(iframe)
driver.find_element_by_css_selector('#newtag').send_keys(1111)
#iframe 一定要一层一层找,层级一旦错误就定位失败
driver.switch_to.frame('baidu-frame')
driver.find_element_by_css_selector('#kw').send_keys(1111)
#返回到上一级iframe
driver.switch_to.parent_frame()
driver.find_element_by_css_selector('#newtag').clear()
#一次返回到最外层的iframe
driver.switch_to.default_content()
driver.find_element_by_css_selector('#i1').send_keys(2222)

SwitchToAlert

# alert 实际上也是Selenium的一个模块
from selenium.webdriver.common.alert import Alert # 也可以通过Webdriver的switch_to来调用 # 点击确认按钮
driver.switch_to.alert.accept() # 如果是确认弹框,相当于点击需要和X按钮
driver.switch_to.alert.dismiss() # 如果alert上有文本框时,可以输入文字。(注: 没遇到过)
driver.switch_to.alert.send_keys() # 返回Alert上面的文本内容
text = driver.switch_to.alert.text
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/uitester/")
driver.maximize_window()#将窗口放大
driver.execute_script('window.scrollTo(0,0);')
e=driver.find_element_by_css_selector('#alert')
e.click()
import time
time.sleep(2)
print(driver.switch_to.alert.text)#获取alert弹窗中的文本内容
driver.switch_to.alert.accept()#点击alert的确定按钮
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/uitester/")
driver.maximize_window()#将窗口放大
driver.execute_script('window.scrollTo(0,0);')
el=driver.find_element_by_css_selector('#confirm')
el.click()
import time
time.sleep(2)
print(driver.switch_to.alert.text)
# driver.switch_to.alert.accept()#点击确定
driver.switch_to.alert.dismiss()#点击取消

Select

在UI自动化测试过程中,经常会遇到一些下拉框,如果我们基于Webdriver操作的话就需要click两次,而且很容易出现问题,实际上Selenium给我们提供了专门的Select(下拉框处理模块)。

引用路径:

from selenium.webdriver.support.select import Select

Select操作

# 通过select选项的索引来定位选择对应选项(从0开始计数)
Select(s).select_by_index(5) # 通过选项的value属性值来定位
Select(s).select_by_value('') # 通过选项的文本内容来定位
Select(s).select_by_visible_text('牡丹江') # 返回第一个选中的optionElement对象
Select(s).first_selected_option # 返回所有选中的optionElement对象
Select(s).all_selected_options # 取消所有选中的option
Select(s).deselect_all() # 通过option的index来取消对应的option
Select(s).deselect_by_index(1) # 通过value属性,来取消对应option
Select(s).deselect_by_value('') # 通过option的文本内容,取消对应的option
Select(s).deselect_by_visible_text('')
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/html/")
driver.maximize_window()#将窗口放大
driver.execute_script('window.scrollTo(0,0);')
from selenium.webdriver.support.select import Select
#应用select模块必须为select标签编写的下拉框
#如果select元素不在页面中展示时(需要加载时),需要滑动到该元素位置时,才能操作:使用driver.execute_script('window.scrollTo(0,1800);'),高度自己调节
s=driver.find_element_by_xpath('//select[1]')
# Select(s).select_by_index(3)#四川
Select(s).select_by_value('')#北京
#当你的元素中还含有元素的话,就可以在find element来缩小范围
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/uitester/")
driver.maximize_window()#将窗口放大
driver.execute_script('window.scrollTo(0,0);')
from selenium.webdriver.support.select import Select
print(driver.find_element_by_css_selector('#on').is_selected())
print(driver.find_element_by_css_selector('#off').is_selected())#是否被选中()

Selenium-Switch与SelectApi介绍的更多相关文章

  1. Selenium学习之==>Switch与SelectApi接口详解

    Switch 我们在UI自动化测试时,总会出现新建一个tab页面.弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了.需要用到Se ...

  2. selenium IDE工具页面介绍!

    selenium IDE工具页面,常用功能点介绍

  3. Python + selenium + pycharm 环境部署细节 和selenium、Jenkins简单介绍

    一.测试体系:Python + selenium + pycharm + Jenkins/docker 环境搭建: 1.安装python 3.4/3.5 2/3.6/ 3.7 2.配置环境变量 3.p ...

  4. Selenium - Switch & Select Api

    一.多表单切换  driver.switch_to.frame() iframe  :直接将一个html 页面嵌入另一个html 页面中 switch_to.frame() 默认可以直接取表单的id ...

  5. Java + selenium Timeout接口用法介绍

    上一篇介绍了关于如何启动浏览器的方法.这篇文章要介绍一下,上一篇代码中关于等待时间的接口方法,代码如下: driver.manage().timeouts().pageLoadTimeout(5, T ...

  6. 使用selenium前学习HTML介绍

    <!-- HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (mark ...

  7. selenium常用方法,简版介绍

    WebElement 接口共计16个------------接口 代表一个HTML元素.通常,所有与页面交互有关的有趣操作都将通过此界面执行. void clear() void click() We ...

  8. 【Selenium】1.介绍 Selenium

    本文供学习交流之用,没有商业用途,没有盈利. 完全是我自己为督促自己学习而翻译的.翻译的不好,见谅.来源于:http://www.guru99.com/introduction-to-selenium ...

  9. 自动化测试-Selenium家谱介绍

    一.自动化测试定义 自动化测试是通工具录制或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证. 二.什么样的项目适合做自动化测试 1.需求明确,不会 ...

随机推荐

  1. sqlite时间类型

    SQLite分页显示:Select * From news order by id desc Limit 10 Offset 10这篇文章是根据 SQLite 官方 WIKI 里的内容翻译,如果有什么 ...

  2. LinkedHashSet 源码分析

    LinkedHashSet 1)底层由 LinkedHashMap 支持的 Set 接口实现,该 Set 中的元素具有可预知的迭代顺序. 创建实例 /** * 构造一个新的空 set,其底层 Link ...

  3. 搭建python-flask开发环境

    ubuntu环境 1. 更新系统软件源: 没有通过更新系统软件源的话,可能无法通过apt-get install安装我们需要用到的软件: $ sudo apt-get update $ sudo ap ...

  4. Delphi XE2 之 FireMonkey 入门(15) - 滤镜: 获取滤镜信息

    滤镜类的继承关系: TObject -> TPersistent -> TFilter -> TShaderFilter -> { 具体的滤镜类 } //下面例子首先会用到 F ...

  5. delphi编写提取exe文件的ICO图标

    http://www.duote.com/tech/4/11797.html delphi编写提取exe文件的ICO图标 7.0分 出处:天下网吧 时间:2011-08-05 人气:2390 核心提示 ...

  6. django基于odm,简单的post和get封装

  7. 编程字体Source Code Pro 免费下载

    对于程序员来说,好的字体应该满足的基本条件: 字母和数字易于分辨,如: 英文字母o 和 阿拉伯数字 0 ,或者 英文字母 l 和 阿拉伯数字 1 ,两个单引号 '' 和双引号 ”. 字体等宽,保持对齐 ...

  8. C#后台保存Cookie

    一般是: Response.Cookies["backurl"].Expires.AddDays(2); 但是,IE浏览器保存Cookie用 Response.Cookies[&q ...

  9. 20191105 《Spring5高级编程》笔记-第12章

    第12章 使用Spring远程处理 12.4 在Spring中使用JMS 使用面向消息的中间件(通常成为MQ服务器)是另一种支持应用程序间通信的流行方法.消息队列(MQ)服务器的主要优点在于为应用程序 ...

  10. IE浏览器下用JS创建文件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...