许多人在执行脚本的时候会发现,明明自己的元素路径没写错啊!怎么还是报元素未找到的异常呢?是的,没错,你可能是遇上iframe啦!下面将介绍关于iframe的相关操作

    例子:以163邮箱登录页面为例

如果你直接去定位账号输入框元素的话是定位不成功的,看到上图标红处的箭头没,原来这个元素在iframe框架里面,要想定位这个元素,必须先切换到这个iframe内才行。我们先找到iframe这层。如下图:

代码:

from selenium import webdriver   # 导入webdriverimport timedriver = webdriver.Chrome()driver.get('https://mail.163.com/')time.sleep(1)iframe = driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe')   # 定位iframedriver.switch_to.frame(iframe)                                          # 切换iframe框架里面a = driver.find_element_by_xpath('//input[@name="email"]')              # 定位输入框元素a.send_keys('不知不觉多少好时光')                                           # 输入文本print(a.get_attribute('value'))                                         # 获取输入的value值driver.quit()

结果:

注意:

1.driver.switch_to.frame()为新方法,而driver.switch_to_frame()为老方法。

2.其实iframe的切换是默认支持id和name的方法的,也就是说假如iframe元素中有id和name属性(当然,要确保是唯一的,并且不是动态值),你可以直接使用driver.switch_to.frame('id')或者driver.switch_to.frame('name')进行切换,实际情况中会遇到没有id属性和name属性为空的情况,这时候就需要先定位iframe,把iframe当成一个元素来定位就行了

3.我这里由于iframe的id是动态值,且name为空,所以就把iframe当成一个元素来处理了

当我们切换了iframe之后,想要回到上一层框架,怎么办呢?webdriver也提供了不错的方法

1.driver.switch_to.parent_frame()     # 回到上一层框架

2.driver.switch_to.default_content()  # 一次性回到主框架(当切换了多层iframe之后,用这个太方便了)

selenium自动化之切换iframe的更多相关文章

  1. python UI自动化之切换iframe

    python+selenium写UI自动化的时候,经常会遇到需要切换iframe的情况,这里介绍几种切换iframe的方式 1.使用id定位 driver.switch_to.frame(" ...

  2. 通过切换iframe来定位元素(用于Python+selenium自动化测试)

    切换 iframe:1.由于登录按钮是在iframe上,所以第一步需要把定位器切换到iframe上2.用switch_to_frame方法切换,此处有id属性,可以直接用id定位切换 iframe 与 ...

  3. Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 -- iframe专题 <下>

    学习目的: 掌握iframe矿建的定位,因为前端的iframe框架页面元素信息,大多时候都会带有动态ID,无法重复定位. 场景: 1. iframe切换 查看iframe 切换iframe 多个ifr ...

  4. Selenium自动化脚本开发总结

    Selenium Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具. Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mo ...

  5. python+selenium自动化软件测试(第2章):WebDriver API

    2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...

  6. python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]

    背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

  7. Selenium自动化面试题

    (1)selenium的工作原理?        ① 脚本启动driver ② driver去驱动浏览器作为远程服务器 ③ 执行脚本发送请求 ④ 服务器解析请求作出相应操作,并返回给客户端(脚本) ( ...

  8. Selenium自动化发送163邮箱

    自动化发送163邮件 方法一: import time import datetime from selenium import webdriver from selenium.webdriver.s ...

  9. selenium webdriver窗口切换(上)

    selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test201 ...

随机推荐

  1. QTP基本方法4------手动写入信息到测试结果报告中

    可以使用写代码的方式添加结果信息到测试结果报告中. 结构:reporter.ReportEvent result,object,details,path result:状态:4种状态:micPass. ...

  2. JNI由浅入深_3_Hello World

    1.需要准备的工具,eclipse,cdt(c++)插件,cygwin(unix)和 android ndk. 在cygwin的etc目录下将ndk的路径引入到profile文件中,可以在cygwin ...

  3. Weex 环境搭建 (一)

    1  安装Node.js 去Node.js 官网  https://nodejs.org/      下载安装文件安装. 安装好后,根据如下命令检查是否安装正常. 在windows 环境下,开始-运行 ...

  4. JAVA并发(一)

    java并发的一系列框架和技术主要是由java.util.concurrent 包所提供.包下的所有类可以分为如下几大类: locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类 ...

  5. 手把手教你创建私有podspec

    本文来自 网易云社区 . CocoaPods是iOS非常好用的类库管理工具,可以非常方便的管理和更新项目中使用到的第三方库,以及将自己项目中的公共组件交由它管理. 工作中比较常用到的是通过CocoaP ...

  6. Java中 方法的多态 简析图

    代码如下: public class Client{    public static void main(String[] args){        Person p = new Person() ...

  7. Java中的引用:强引用、软引用、弱引用、幻象引用(虚引用)

    Java语言中,除了原始数据类型的变量(八大基本数据类型),其他都是引用类型,指向各种不同的对象. 理解引用对于我们掌握Java对象生命周期和JVM内部相关机制都是有帮助的. 不同的应用类型,不同之处 ...

  8. JS-instanceof 与typeof

    通常来讲,使用 instanceof 就是判断一个实例是否属于某种类型 而typeof  无论引用的是什么类型的对象,它都返回 "object" var arr=[1,2,3]; ...

  9. MySQL----MySQL数据库入门----第一章 数据库入门

    第一章 数据库入门 1.1 数据库基础知识 1.1.1 数据库概述 数据不仅包括普通意义上的数字,还包括文字.图像.声音等.也就是说,凡是在计算机中用来描述事物的记录都可称作数据. 数据库的基本特点: ...

  10. php以数组做为配置文件的读取和写入操作

    最近想用php开发个简单的文章管理系统,主要是做一批垃圾采集站,目前网上的cms都太多功能了,导致修改个模板要很多文件,花费很多功夫.开始用thinkphp框架做,感觉还是麻烦,后来改用ci,做好了后 ...