python selenium-webdriver 定位frame中的元素 (十三)
定位元素时经常会出现定位不到元素,这时候我们需要观察标签的上下文,一般情况下这些定位不到的元素存放在了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中的元素 (十三)的更多相关文章
- Java中通过Selenium WebDriver定位iframe中的元素
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题:有一些元素,无论是通过id或是xpath等等,怎么都定位不到. 分析:这很可能是因为你要定位 ...
- Python脚本控制的WebDriver 常用操作 <二十四> 定位frame中的元素
测试用例场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如 ...
- Python+Selenium 自动化实现实例-定位frame中的元素
场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如何理解这 ...
- Python+Selenium学习--定位iframe中的对象
场景 在web 应用中经常会出现frame 嵌套的应用,假设页面上有A.B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B. switch_to_frame ...
- Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结
由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...
- 定位frame中的元素
场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如何理解这 ...
- python + selenium webdriver 复合型css样式的元素定位方法
<div class="header layout clearfix"></div> 当元素没有id,没有name,没有任何,只有一个class的时候,应该 ...
- 转:python webdriver API 之定位 frame 中的对象
在 web 应用中经常会出现 frame 嵌套的应用,假设页面上有 A.B 两个 frame,其中 B 在 A 内,那么定位 B 中的内容则需要先到 A,然后再到 B.switch_to_frame ...
- Python+Selenium自动化-定位页面元素的八种方法
Python+Selenium自动化-定位页面元素的八种方法 本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...
随机推荐
- 非关系统型数据库-mangodb
第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合. ...
- NPOI处理Word文本中上下角标
读取Word文档,并将文本转成html标签,后面发现,经常有带上下角标的内容,于是一并处理了. 核心在于对XWPFRun对象中Subscript属性的处理. /// <summary> / ...
- 让虚拟环境解决python多版本并行
一.安装篇 1.本文操作系统为CentOS7 依赖包(安装时可能还存在其他依赖包,结合报错进行安装) [root@Corre home]# yum install make build-essenti ...
- matlab2017b
https://blog.csdn.net/m0_37638031/article/details/78982498
- TCP学习总结(四)
TCP连接管理 TCP运输连接有3个阶段, 即: 连接建立,数据传送和连接释放. 1. TCP的连接建立(3次握手) TCP连接的建立采用客户服务器方式.主动发起连接建立的应用进程叫做客户(clien ...
- linux下怎么判断网卡速率?
我们都知道ifconfig -a 可以列出所有网卡,但是怎么判读是千兆网卡还是百兆网卡呢? 1. 判断是千兆网卡还是百兆网卡 ethtool ethx 查看支持的速率 实际网卡速率可以看Speed 1 ...
- ip代理简单方法
requests.post(url-url,headers=headers,data=data,proxies={'https':'192.165.1.56:8000'}
- Python 子进程不能input
from threading import Thread from multiprocessing import Process def f1(): name = input('请输入名字') #EO ...
- Python第十课学习
Python第十课学习 www.cnblogs.com/yuanchenqi/articles/5828233.html 函数: 1 减少代码的重复 2 更易扩展,弹性更强:便于日后文件功能的修改 3 ...
- 关于indexof和substring经常记不住的点
indexof 找到的字符位置是 字符串从0位开始算起的. lastIndexOf也一样,http://localhost:8080/aaa,的lastIndexOf("/")是2 ...