selenium2自动化测试学习笔记(三)
今天是学习selenium的第三天,今天的主题是自动登录126邮箱。
今天总结碰到的坑有三个:
1、frame内元素抓取,使用driver.switch_to.frame(frameId)方法切换锁定frame
2、等待页面渲染完毕定位输入,chrome下使用sleep(秒)等待
3、 driver的element内置方法会有失灵情况,采用driver.execute_script(js字符串)方法执行
初始代码,代码中的username\password替换成自己的账户密码即可
from selenium import webdriver #自动打开邮箱主页登录
driver = webdriver.Firefox()
#driver = webdriver.Chrome()
#driver = webdriver.Ie()
dr.get("http://mail.126.com")
idInput = dr.find_element_by_xpath('//input[@name="email"]')
pwdInput = dr.find_element_by_xpath('//input[@name="password"]')
idInput.clear()
idInput.send_keys("username")
pwdInput.clear()
pwdInput.send_keys("password") dr.find_element_by_id('dologin').click() dr.quit()
搞了半天,怎么都获取不到,然后抓取本页面的所有input,循环打印出来,发现确实找不到登录框。
inputs = driver.find_elements_by_xpath("//input")
print( len(inputs) )
for input in inputs:
print('input id is ',input.get_attribute("id"),
'| input name is ',input.get_attribute("name") )
眼瞎的后面才发现是嵌套在iframe中的,这就好办了,网上搜索了下定位方法
#driver.switch_to.frame("x-URS-iframe")#定位到登录frame
print('begin定位到x-URS-iframe')
driver.switch_to.frame("x-URS-iframe")
print('end定位到x-URS-iframe')
接下来的代码都一样,但是在email框中send_keys始终无法输入成功,password却可以,莫名其妙,没搞懂。
此时换成执行js方法
dologin = driver.find_element_by_id("dologin")
email = driver.find_element_by_name("email")
password = driver.find_element_by_name("password") print('email is_displayed ',email.is_displayed() )
print('email is_enabled ',email.is_enabled() )
email.clear()
#email.send_keys('kiokyw')#火狐此方法不行 #调用js 输入
email_id = email.get_attribute("id")
js = "document.getElementById('"+email_id+"').value='username'"
print(js)
driver.execute_script(js)
执行成功,再输入password,并点击登录按钮
password.clear()
password.send_keys('password') print( 'email class = ', email.get_attribute('class') )
print( 'email value = ', email.get_attribute('value') )
print( 'password value = ', password.get_attribute('value') ) js = "document.getElementById('dologin').click()"
print(js)
driver.execute_script(js)
#dologin.click()#IE下此方法不行
print('登录成功')
最后是切回主frame,否则还在原来的frame中,获取不到新页面的元素
#切回主frame
driver.switch_to.default_content() #当前url
now_url = driver.current_url
print(now_url) #获取当前登录用户名
user = driver.find_element_by_id('spnUid').text
print(user)
最后是完整代码
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
from time import ctime
from time import sleep driver = webdriver.Firefox()
#driver = webdriver.Chrome()
#driver = webdriver.Ie() #设置隐式等待为10秒
driver.implicitly_wait(10) url = 'http://www.126.com'
driver.get(url)
print("title is ",driver.title) #element = WebDriverWait( driver,5, 0.5).until(
# EC.presence_of_element_located((By.NAME,'wd'))
# ) '''
try:
idInput = driver.find_elements_by_xpath('//a')
#等同
#idInput = driver.find_elements_by_css_selector('a')
print(len(idInput))
for a in idInput:
print(a.get_attribute('id') )
except:
print("test error") try: element = WebDriverWait( driver,10, 0.5).until(
EC.presence_of_element_located((By.ID,'dologin'))
)
idInput = driver.find_elements_by_css_selector('input')
print(len(idInput))
for a in idInput:
print(a.get_attribute('id') )
except:
print("test error")
'''
#定位到iframe
try:
sleep(10) #chrome下需要等待
print( ctime(),'| url=',driver.current_url )
#driver.switch_to.frame("x-URS-iframe")#定位到登录frame
print('begin定位到x-URS-iframe')
driver.switch_to.frame("x-URS-iframe")
print('end定位到x-URS-iframe') inputs = driver.find_elements_by_xpath("//input")
print( len(inputs) )
for input in inputs:
print('input id is ',input.get_attribute("id"),
'| input name is ',input.get_attribute("name") ) dologin = driver.find_element_by_id("dologin")
email = driver.find_element_by_name("email")
password = driver.find_element_by_name("password") print('email is_displayed ',email.is_displayed() )
print('email is_enabled ',email.is_enabled() )
email.clear()
#email.send_keys('kiokyw')#火狐此方法不行 #调用js 输入成功 email_id = email.get_attribute("id")
js = "document.getElementById('"+email_id+"').value='kiokyw'"
print(js)
driver.execute_script(js) password.clear()
password.send_keys('Yy19861121') print( 'email class = ', email.get_attribute('class') )
print( 'email value = ', email.get_attribute('value') )
print( 'password value = ', password.get_attribute('value') ) js = "document.getElementById('dologin').click()"
print(js)
driver.execute_script(js)
#dologin.click()#IE下此方法不行
print('登录成功') #切回主frame
driver.switch_to.default_content() #当前url
now_url = driver.current_url
print(now_url) #获取当前登录用户名
user = driver.find_element_by_id('spnUid').text
print(user) except BaseException as msg:
print(msg) print("关闭浏览器")
driver.quit()
以上代码太长了,再另附一份谷歌登录163邮箱的代码,重点是需要等待渲染
from selenium import webdriver
from time import sleep #自动打开邮箱主页登录
#dr= webdriver.Firefox()
dr= webdriver.Chrome()
#dr = webdriver.Ie()
dr.get("http://mail.163.com")
sleep(2)
dr.switch_to.frame("x-URS-iframe")
idInput = dr.find_element_by_xpath('//input[@name="email"]')
pwdInput = dr.find_element_by_xpath('//input[@name="password"]')
idInput.clear()
idInput.send_keys("username")
pwdInput.clear()
pwdInput.send_keys("password") dr.find_element_by_id('dologin').click() dr.quit()
selenium2自动化测试学习笔记(三)的更多相关文章
- selenium2自动化测试学习笔记(一)
从这周开始学习自动化测试,采用selenium2,目标是在本月学习到appium,并测试公司的真实APP项目. 系统环境:win10 语言:python3.6.4 工具:selenium2 IDE:p ...
- selenium2自动化测试学习笔记(五)-参数化编程,自动登陆网易QQ邮箱
学习python下使用selenium2自动测试第6天,参数化编程这节课花了两天时间. 本次编程主要时间是花在熟悉python上 知识点or坑点: 1.读取txt.xml.csv等文件存储的账号.密码 ...
- selenium2自动化测试学习笔记(四)
今天是学习selenium2第四天.总结下今天的学习成果,自动登录网易邮箱并写信发送邮件. 知识点or坑点: 1.模块化编写测试模块(类似java里的抽象方法,js的函数编写) from 包名 imp ...
- selenium2自动化测试学习笔记(二)
chromedriver报错问题解决了,真是无语 是因为chromedriver与浏览器版本不一致 http://chromedriver.storage.googleapis.com/index.h ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
随机推荐
- mpeg文件格式分析
MPEG-1流比特层次结构分析总结 1.简要介绍Mpeg 2.Mpeg-1数据流分析 2.1视频序列层(VideoStream) 2.2画面组层(GOP) 2.3画面层(Pictures) 2.4片层 ...
- EJB相关的面试题
1.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别. (1)EJB包括Session Bean.Ent ...
- Linux显示包含全部的文件系统
Linux显示包含全部的文件系统 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ df -a 文件系统 1K-blocks 已用 可用 已用% 挂载点 /dev ...
- Linux显示文件和目录的详细资料
Linux显示文件和目录的详细资料 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -l 总用量 56 -rw-r--r-- 1 youhaidong y ...
- 芝麻HTTP:PhantomJS的安装
PhantomJS是一个无界面的.可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作.CSS选择器.JSON.Canvas以及SVG. Selenium支持PhantomJS,这 ...
- 芝麻HTTP:TensorFlow LSTM MNIST分类
本节来介绍一下使用 RNN 的 LSTM 来做 MNIST 分类的方法,RNN 相比 CNN 来说,速度可能会慢,但可以节省更多的内存空间. 初始化 首先我们可以先初始化一些变量,如学习率.节点单元数 ...
- javscript eval()的优缺点与web安全防范
要说JavaScript中最为强大的一个方法便是eval()方法呢,为何如此说呢?因为它就像是一个JavaScript解析器,也就是说它的参数就是一段js代码所构成的字符串,当执行这个函数的时候,会把 ...
- 【洛谷T7152】(考试题目)细胞
题面 题目描述 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每天每个该细胞可以分裂出 x − 1 个新的细胞. 小 X 决定第 ...
- 快速开发 HTML5 WebGL 的 3D 斜面拖拽生成模型
前言 3D 场景中的面不只有水平面这一个,空间是由无数个面组成的,所以我们有可能会在任意一个面上放置物体,而空间中的面如何确定呢?我们知道,空间中的面可以由一个点和一条法线组成.这个 Demo 左侧为 ...
- Java项目中环境变量的问题
刚入职程序员的小朋友,第一次往eclipse导入项目总会出现这样那样的错误. 总结了几种查看和处理的方法: 1.打开project-->clean.然后build.目的将工程中的.class文件 ...