1. 多表单切换

WebDriver只能在一个页面上对元素进行识别和定位,无法直接定位frame/iframe表单内嵌页面上的元素,这是就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面
通过switch_to.frame()切换表单
通过switch_to.default_content()回到最外层的页面

from time import sleep
from selenium import webdriver driver = webdriver.Chrome()
driver.get("http://www.126.com")
driver.maximize_window()
sleep(2) driver.find_element_by_link_text("密码登录").click()
login_frame = driver.find_element_by_css_selector("iframe[id^=x-URS-iframe]") driver.switch_to.frame(login_frame)
driver.find_element_by_name("email").send_keys("user@126.com")
driver.find_element_by_name("password").send_keys("")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()

2 多窗口切换

current_window_handle:获得当前窗口
子主题 1
window_handles:返回所有窗口的句柄到当前会话
switch_to.window():切换到相应的窗口

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window() # 获得当前窗口句柄
search_window = driver.current_window_handle driver.find_element_by_link_text("登录").click()
driver.implicitly_wait(5)
driver.find_element_by_link_text("立即注册").click() # 获得当前所有窗口句柄
all_handles = driver.window_handles # 进入注册窗口进行操作
for handle in all_handles:
if handle != search_window:
driver.switch_to.window(handle)
print(driver.title)
driver.find_element_by_name("userName").send_keys("usename")
driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__phone']").send_keys("134XXXXXXXX")
driver.close()
driver.switch_to.window(search_window)
print(driver.title)
driver.quit()

3 警告框处理

在WebDriver中处理Javascript生成的alert、confirm、prompt,使用switch_to.alert方法定位,然后使用text、accept、dismiss、send_keys等进行操作
text:返回alert、confirm、prompt中的文字信息
accept():接收现有警告框
dismiss():解散所有警告框
send_keys():在警告框中输入文本(如果可以输入文本的话)

from time import sleep
from selenium import webdriver driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window() driver.find_element_by_link_text("设置").click()
driver.find_element_by_link_text("搜索设置").click()
sleep(2)
driver.find_element_by_class_name("prefpanelgo").click() # 获取警告框
alert = driver.switch_to.alert
text = alert.text
print(text)
# 接受警告框
alert.accept()
driver.quit()

4 下拉框处理

WebDriver提供了Select类来处理下拉框
导入Select类:
from selenium.webdriver.support.select import Select
Select类:用于定位<select>标签
select_by_value():通过value值定位下拉框选项
select_by_visible_text():通过text值定位下拉选项
select_by_index():根据下拉框的索引进行选择。第一个选项为0,第二个选项为1

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select driver = webdriver.Chrome()
driver.get("http://www.baidu.com") link = driver.find_element_by_link_text("设置").click()
driver.find_element_by_link_text("搜索设置").click()
sleep(2) sel = driver.find_element_by_xpath("//select[@id='nr']")
sleep(2)
Select(sel).select_by_value("")
sleep(2)
Select(sel).select_by_index("")
sleep(2)
Select(sel).select_by_visible_text("每页显示10条")

5 窗口截图

WebDriver提供了截图函数save_screenshot(),可以用来截取当前窗口

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 截取当前窗口
driver.save_screenshot("./baidu.png")
driver.quit()

016-WebDriver API(2)的更多相关文章

  1. Webdriver API (二)

    (转载) 1.3 打开测试页面 对页面对测试,首先要打开被测试页面的地址(如:http://www.google.com),web driver 提供的get方法可以打开一个页面: // And no ...

  2. Webdriver API (一)

    (转载) 1.1  下载selenium2.0的包 官方download包地址:http://code.google.com/p/selenium/downloads/list 官方User Guid ...

  3. Webdriver API (三)- actions

    Actions类主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作.对于这些操作,使用perform()方法进行执行. actions类可以完成单一的操作,也可以完成几个操作的组合. 有 ...

  4. 移动端自动化测试(二)之 Appium常用的API(python)函数介绍

    上一章节已经介绍了Appium的环境搭建,其实只要掌握了Appium的工作原理,前期的准备工作和安装过程是比较简单的.那么当我们搭建好Appium环境后接下来做些什么呢?通常思路是开始appium的第 ...

  5. Robotframework-Appium 之常用API(一)

    上一遍隨筆(https://www.cnblogs.com/cnkemi/p/9639809.html)用Python + Robotframework + Appium對Android app小試牛 ...

  6. 我这么玩Web Api(二):数据验证,全局数据验证与单元测试

    目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解 ...

  7. [Android]使用Dagger 2依赖注入 - API(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...

  8. [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...

  9. ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看另一种验证的方式:digest authentication,即摘要认 ...

  10. ASP.NET Web API(二):安全验证之使用HTTP基本认证

    在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求 ...

随机推荐

  1. 1.RCC of STM32F103

    开发板用的是8Mhz晶振,即HSE=8,000,000 f103最大支持72Mhz,即SYSCLK=PLLCLK=72Mhz,HSE=8M,所以PLLM=9即可. /* HCLK = SYSCLK * ...

  2. ICPC 2018 徐州赛区网络赛

    ACM-ICPC 2018 徐州赛区网络赛  去年博客记录过这场比赛经历:该死的水题  一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进.     D. Easy Math 题意:   ...

  3. CSS选择器及优先级

    转自CSS优先级的计算公式:http://wyz.67ge.com/css-selector-priority/ 通常我们可以将CSS的优先级由高到低分为六组: 无条件优先的属性只需要在属性后面使用 ...

  4. linux的mysql权限错误导致看不到mysql数据库

    1.首先停止mysql服务:service mysqld stop2.加参数启动mysql:/usr/bin/mysqld_safe --skip-grant-tables & 然后就可以无任 ...

  5. css---3链接伪类与动态伪类

    链接伪类link:表示作为超链接,并指向一个未访问的地址的所有锚 链接伪类不可以加在div上 <!DOCTYPE html> <html> <head> <m ...

  6. Type.GetType(string.contains(','))

    例如 Type type = Type.GetType("ACalCoreServiceLib.BaseService,ACalCoreServiceLib"); 里面的ACalC ...

  7. Python遇到的第一个问题

    1.运行如下代码: 输入成绩80之后报错: 2.问题分析:字符串跟整型不能比 3.查看score的类型 print(type(score)), 由此看出score是string类型的,因为input接 ...

  8. SG函数博弈——poj2311

    关于SG函数的博弈 首先定义必败态 x : SG[x]=0 设任意一个状态y,到所有y能到达的状态连一条边,令这些后继为z y : SG[y]=mex(SG[z]) SG[y]==0 : y就是必败态 ...

  9. JS的高阶函数

    JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. 这就是最简单的高阶函数啦 functio ...

  10. php中Cookies

    PHP Cookies cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制,PHP 透明地支持 HTTP cookie. cookie 常用于识别用户. Cookie 是什么? c ...