定位元素时经常会出现定位不到元素,这时候我们需要观察标签的上下文,一般情况下这些定位不到的元素存放在了frame或者放到窗口了,只要我们切入进去就可以很容易定位到元素。

处理frame时主要使用到switch_to.frame()(切入frame也可以些写成switch_to_frame,不过这个已经用的很少了)和switch_to_default_content()两个方法,一个主要是切入到iframe里面,一个是切换到主文档中,一般情况这两个要配合着用,切进去以后操作完成元素以后,就要在切回到主文档,避免一些其他的错误。

  • switch_to.frame()  #如果frame 中有name和id属性就直接使用id或者name进行定位,如果没有id和name属性,可以通过find_element_by_xpath(或者其他定位)方法定位到这个iframe元素,然后把这个元素传进去。
#-*- coding:utf-8 -*-
'''126邮箱登陆'''
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC class WANGYI(unittest.TestCase):
def setUp(self):
print('开始测试')
self.username = 'yuhuan2006_2548' # 定义账号
self.password = 'xxxxx' #定义密码
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.base_url = "http://mail.126.com/"
self.driver.get(self.base_url) def test_login(self):
'''测试登陆126邮箱'''
WebDriverWait(self.driver,10).until( EC.presence_of_element_located((By.ID, "x-URS-iframe")))
self.driver.switch_to.frame("x-URS-iframe") #切换进入frame 在这里也可以写self.driver.switch_to.frame(self.driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')),先定位元素
self.driver.find_element_by_name("email").send_keys(self.username)
self.driver.find_element_by_name("password").send_keys(self.password)
self.driver.find_element_by_id("dologin").click()
WebDriverWait(self.driver,10).until( EC.presence_of_element_located((By.ID, "spnUid"))) #增加等待时间,判断验证信息元素是否显示
verifyLoginSucceed = self.driver.find_element_by_xpath('//*[@id="spnUid"]').text
self.assertIn(self.username,verifyLoginSucceed) #验证是否登陆成功
def tearDown(self):
self.driver.implicitly_wait(30)
self.driver.quit()
print('测试结束') if __name__ == '__main__':
unittest.main()

正好有人问我126邮箱如何输入账号和密码,开始他以为是由于Input标签的属性导致没有办法输入账号,后来正好有时间了,看了一下126邮箱的你过来,发现这里正是用到了iframe切换,所以在这里总结了一下frame,并且以126邮箱为例子写了一下。

python selenium-webdriver 定位frame中的元素 (十三)的更多相关文章

  1. Java中通过Selenium WebDriver定位iframe中的元素

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题:有一些元素,无论是通过id或是xpath等等,怎么都定位不到. 分析:这很可能是因为你要定位 ...

  2. Python脚本控制的WebDriver 常用操作 <二十四> 定位frame中的元素

    测试用例场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如 ...

  3. Python+Selenium 自动化实现实例-定位frame中的元素

    场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如何理解这 ...

  4. Python+Selenium学习--定位iframe中的对象

    场景 在web 应用中经常会出现frame 嵌套的应用,假设页面上有A.B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B.      switch_to_frame ...

  5. Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结

    由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...

  6. 定位frame中的元素

    场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如何理解这 ...

  7. python + selenium webdriver 复合型css样式的元素定位方法

    <div class="header layout clearfix"></div> 当元素没有id,没有name,没有任何,只有一个class的时候,应该 ...

  8. 转:python webdriver API 之定位 frame 中的对象

    在 web 应用中经常会出现 frame 嵌套的应用,假设页面上有 A.B 两个 frame,其中 B 在 A 内,那么定位 B 中的内容则需要先到 A,然后再到 B.switch_to_frame  ...

  9. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

随机推荐

  1. JAVA中代理模式

    代理模式 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用.代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能 ...

  2. mongo的runCommand与集合操作函数的关系

    除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...

  3. 安装oracle11g client 【INS-30131】执行安装程序验证所需的初始设置失败的解决方法

    今天在服务器(操作系统windows server 2008R2)上安装Oracle11g 客户端,弹出“执行安装程序验证所需的初始设置失败”,如上图.网上找了一些方法,简单整理如下,仅供参考. 问题 ...

  4. mysql知识点拾遗梳理

    mysql卸载重装过程: sudo apache2ctl stop sudo apt-get --purge remove mysql-client mysql-server mysql-common ...

  5. jquery评分插件jquery.raty.js

    1.参考链接 官方地址. 教程一 教程二 2.案例1 引入文件: <!-- 评分插件 --> <script type="text/javascript" src ...

  6. MySql5.7多实例配置教程

    最近朋友在搞在Linux上配置MySql5.7多实例教程,在网上查询了很多资料,一直报各种各样的错误,后来在网上搜了一篇博客,根据其配置,最近是配置成功了 参考配置连接:https://blog.cs ...

  7. MAC Homebrew安装和简单使用

    前言: 这个周六日在刚刚买的macbookpro(系统版本是:10.13.5)上面安装angular,一开始是按照windows上的顺序安装的,先安装node.js,然后在安装angular的时候报错 ...

  8. Map、Set、List区别

    转:https://www.cnblogs.com/jing99/p/6947549.html 提到集合之前,先说说数组Array和集合的区别:   (1)数组是大小固定的,并且同一个数组只能存放类型 ...

  9. bbs项目学习到的知识点(orm中的extra)

    注册 form组件给input 的标签 添加样式类  参见这篇博客(点击) 上传图像 1.解决 一点击图像就会直接打开上传文件的按钮 #这儿利用了 label标签和input的特殊的联动功能 < ...

  10. Python标准库之textwrap模块

    textwrap通过调整换行符的位置来格式化文本:以下是全部方法 __all__ = ['TextWrapper', 'wrap', 'fill', 'dedent', 'indent', 'shor ...