今天学习selenium ,折腾了一整天,写个笔记记录一下今天的错误。

我用的是java+webdriver,在eclipse中运行,今天的学习是进行网易邮箱的登录功能。一开始代码运行一直报找不到元素,而我试用了id,xpath等方法都失败了。

差不多的代码,在百度上却能正常登录,我搜索了一下,发现是我的第一个问题,没有切换框架。

如图

因为没有切换到iframe,所以才会找不到元素,那么,添加了以下的代码呢?

driver.switchTo().frame(“x-URS-iframe”);

这个代码是我看了很多人的帖子之后添加的,完全就是复制黏贴,但是我还是太天真了,这次报的错是“没有找到这个frame”。

为什么呢?这时我打开网页和页面查看工具,在无数次的打开和关闭中,我终于发现了每次的数字都在变化,也就是说,他是动态的,包括用户名输入框和密码输入框,他们的id也是动态的。

我对前端的掌握只是皮毛,不知道还有动态id这种操作,知道问题之后,度娘起来就更有目标性了。最后,我自己尝试了一下,将代码修改成如下:

1 @Test2 public void testEmail() throwsInterruptedException {3 //隐式等待,等待页面全部元素加载出来

4 driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);5 WebElement iframe = driver.findElement(By.tagName("iframe"));6 String id = iframe.getAttribute("id");7 if(id != null) {8 driver.switchTo().frame(id);9 }10 Thread.sleep(5000);11 WebElement username = driver.findElement(By.name("email"));12 WebElement password = driver.findElement(By.name("password"));13 WebElement button = driver.findElement(By.id("dologin"));14

15 username.sendKeys("账号");16 password.sendKeys("密码");17 button.click();18

19 }

既然iframe的id是动态的,那么可以通过tagname先获取了,然后通过getAttribute方法获取动态id,而账号密码的输入框,则可以用他们固定的属性name来获取。

这段代码还添加了隐式等待和线程的sleep,一开始没有添加的时候,一直显示没有找到元素,还是翻阅了书才知道可能是因为网页还没加载出来而程序已经运行了。一开始没有添加Thread.sleep(5000),然后发现程序的成功运行变成了一个概率问题,有时候能运行,有时候又不能运行,翻阅资料之下添加了这一行代码,就能成功了。

一番操作下来,感觉实现一次用户登录的自动化测试耗时挺长的,我还在学习,知道自己这么写肯定不是最优的方法,但不知道如何优化才能让代码更加有效率。如果文章有不足或者可以改进的地方,请看官指出,我会虚心接受指导。

java模拟网易邮箱登录_java+selenium 实现网易邮箱登录功能相关推荐

  1. java模拟数据库压测_java模拟数据库缓存

    实现缓存一些数据到本地,避免重复查询数据库,对数据库造成压力,代码如下: package threadLock; import java.util.HashMap; import java.util. ...

  2. java模拟登陆教务系统_Java模拟登录高校教务系统

    模拟登陆部分代码: 本次使用HttpClient 4.3进行开发, 该版本与之前的代码写法风格相差较大, 大家多留意下.需导入Jar包:commons-logging-1.1.3.jar / http ...

  3. java 模拟qq空间登陆_java最新完美实现模拟登录QQ登录QQ空间获取说说

    package com.pengliu.config; import com.pengliu.util.http.HttpService; /** * desc: 全局公共属性配置 */ public ...

  4. java模拟数据库压测_java应用的优化【转】

    XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务. 该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升.为了使广大对公客户使用系统时获得 ...

  5. java等待页面加载_java selenium (十三) 智能等待页面加载完成

    我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作.  否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操 ...

  6. java模拟时钟课程设计_java课程设计-时钟图形模拟

    java课程设计-时钟图形模拟 计算机与信息工程系 <高级语言程序设计>课程设计报告课 程 设 计 任 务 书专 业 通信工程 班 级 13 级四班 姓 名 张凯铭设 计 起 止 日 期设 ...

  7. java通过qq邮箱发送_java实现发送QQ邮箱

    需下载mail.jar包 获取16位SMTP命令步骤 默认是关闭的 ,将他开启获取16位SMTP命令 点击进行验证获取16位SMTP命令 package com.zking.test; import ...

  8. java模拟三人爬山_java笔记——模拟多人徒步爬山例子

    模拟多人徒步爬山,使用多线程模拟多人徒步爬山训练要点,使用任意一种方式创建线程,使用 Thread.sleep()方法设置线程休眠.需求说明:每个线程代表一个人可设置每人爬山速度每爬完 100 米显示 ...

  9. java tcp 登录_java 网络编程-TCP-双向登录

    TCP:模拟登录 :双向 服务器端 public class tcp { public static void main(String[]args) throws IOException { Syst ...

最新文章

  1. Python知识点6——函数
  2. LeetCode - Department Highest Salary
  3. Matlab实用程序--图形应用-三维曲线图
  4. maven修改setting文件后重启_Maven项目构建
  5. 并发操作的不一致性问题
  6. Linux下载_Linux系统各种版本ISO镜像下载(redhat,centos,oracle,ubuntu,openSUSE)
  7. 【POJ - 3272】Cow Traffic(dp,建反向图,DAG拓扑图)
  8. 简单地理解 Python 的装饰器
  9. 使用Context和Hooks来管理状态
  10. 初识FL Studio中的FLEX插件
  11. Linux进阶之Jenkins持续集成介绍及安装演示
  12. python弹球游戏移动球拍_python pygame实现挡板弹球游戏的代码
  13. (转)android studio工程编译不出来的一些error
  14. 火山软件开发访问网页查找电话号和读写文件应用
  15. 1.3多媒体存储技术
  16. windows 密码过期_为什么我的密码在Windows中过期?
  17. 安装drupal9报错
  18. 魔方cfop公式软件_【番外篇】八大魔方快速还原法图解介绍汇总大全!
  19. 光纤分布式声波传感DAS语音还原介绍
  20. python获取json数据,快速生成excel

热门文章

  1. mysql 目录的了解以及Linux
  2. 微信商户现金红包api php
  3. ffmpeg七大库功能介绍——机翻、非人话
  4. 【Pytorch】保存神经网络模型
  5. 【面试】排序算法整理
  6. Common lisp编译成C的bin(二)
  7. 三层路由详解、为什么要划分vlan,vlan的作用是什么?
  8. python 欢迎自己程序编写_神操作!一句查询让Python帮忙自己写程序
  9. 云服务器的安全组各个端口代表什么意思?
  10. linux docker端口映射无法访问,docker设置了端口映射,不能访问的解决方案