初学selenium,用最近所学知识写了QQ邮箱自动登录、发送邮件、退出,算是对自己学习的知识的巩固吧。如果哪里有不足之处,就请各位告诉我,指导我一下,非常感谢。

  • 登录页面

在网页登录QQ邮箱的时候,如果电脑登陆了QQ,那么邮箱登录页面的默认登录方式为快捷登录,需要手动点击“账号密码登录”,才能使用账号密码登录,所以我写了一段选择帐号密码登录的代码。又因为当你的电脑没有登录QQ,直接打开QQ邮箱的登录页面时,默认的登录方式就是账号密码登录,所以这段代码抛异常也是无奈之举,如果各位朋友有更好的方法请告诉我。

public class LoginPage {WebDriver driver;WebElement username;WebElement password;WebElement loginbutton;WebElement loginbyup;public LoginPage(WebDriver driver){this.driver = driver;}public void login(String userName,String passWord) {       driver.switchTo().frame("login_frame");//定位登录的iframe/*选择通过用户名和密码来登录*/try {loginbyup = driver.findElement(By.id("switcher_plogin"));loginbyup.click();}catch(Exception e){}/*用户名*/username = driver.findElement(By.id("u"));username.sendKeys(userName);/*密码*/password = driver.findElement(By.id("p"));password.sendKeys(passWord);/*登录按钮*/loginbutton = driver.findElement(By.id("login_button"));loginbutton.click();}}
  • 退出页面

退出登录很简单,其实完全可以写在MainPage里,但是为了以后测试用例的编写不用关心退出登录这个操作的细节,所以单独写出来。

public class LogoutPage {WebDriver driver;WebElement logoutbutton;public LogoutPage(WebDriver driver) {this.driver = driver;}public void logout() {driver.switchTo().defaultContent();//返回主文档logoutbutton = driver.findElement(By.linkText("退出"));logoutbutton.click();}}
  • 写邮件页面

这个页面对于我这个新手来说是最难的一部分,那点在于定位邮件中“正文”的文本编辑框。

public class SendemailPage {WebDriver driver;WebElement addressee;WebElement emailsubject;WebElement emailcontent;WebElement sendbutton;public SendemailPage(WebDriver driver) {this.driver = driver;}public void writeemail(String ad,String subject,String content) {/*收件人*/driver.switchTo().frame("mainFrame");addressee = driver.findElement(By.xpath(".//*[@id='toAreaCtrl']/div[2]/input"));addressee.sendKeys(ad);/*主题*/emailsubject = driver.findElement(By.xpath("//*[@id=\"subject\"]"));emailsubject.sendKeys(subject);/*正文*/driver.switchTo().frame(driver.findElement(By.tagName("iframe")));//这个iframe的id、name都是随机生成的,所以根据id、name、xpath定位无用emailcontent = driver.findElement(By.xpath("//body"));emailcontent.sendKeys(content);/*“发送”按钮*/driver.switchTo().parentFrame();sendbutton = driver.findElement(By.xpath("//*[@id=\"toolbar\"]/div/a[1]"));sendbutton.click();}}

查看“正文”所在的iframe标签,因为之前遇到过类似的情形,看到这个iframe的id、name都是长长的一串数字,说明这个iframe的id及name的值是随机生成的,用id及name定位是不行的。接着我试了用clss定位也不行,

后来想到定位frame还可以用tagName,抱着试一试的态度,居然成功了!能定位到这个iframe那么后面的事情就好办多了,这里就不赘述了。

  • 邮箱主页面
public class MainPage {WebDriver driver;WebElement writeLink;WebElement logoutLink;public MainPage(WebDriver driver){this.driver = driver;}public void toWrite(){driver.switchTo().defaultContent();writeLink = driver.findElement(By.linkText("写信"));writeLink.click();}public void logout(){LogoutPage logoutpage = new LogoutPage(driver); logoutpage.logout();}}
  • 测试类
public class Test {public static void main(String[] args) {System.setProperty("webdriver.firefox.bin", "D:/Mozilla Firefox/firefox.exe");System.setProperty("webdriver.gecko.driver", "D:/selenium-java-3.141.59/geckodriver.exe");WebDriver driver = new FirefoxDriver();driver.get("https://mail.qq.com/");/*登录*/LoginPage tologin = new LoginPage(driver);tologin.login("123456789", "password");/*点击“写信”按钮*/MainPage towrite = new MainPage(driver);towrite.toWrite();/*写信并发送邮件*/SendemailPage tosendemail = new SendemailPage(driver); tosendemail.writeemail("1234567890@qq.com", "这是主题", "恭喜你发送成功!");/*退出*/MainPage tologout = new MainPage(driver);tologout.logout();     }}
  • 总结

编写用例的难点在于frame、iframe的定位及元素定位,如果需要定位的元素在frame或iframe中,需要使用switchTo().frame切到元素所在的frame或iframe中
frame定位常见的几个方法有如下几个:

  1. driver.switchTo().frame();
    可以通过index、id、name、WebElement对象传值地位。
  2. driver.switchTo().parentFrame();
    从子frame返回到父frame中。
  3. driver.switchTo().defaultContent();
    从当前frame中切回主文档。

Java+Selenium实现QQ邮箱自动登录、发邮件与退出相关推荐

  1. selenium实现163邮箱自动登录

    1.报错1:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate ...

  2. java mail 接受QQ邮箱未读的邮件

    案例代码如下 //创建属性对象Properties p = new Properties();p.put("mail.imap.auth.login.disable", " ...

  3. java+selenium 获取QQ邮箱所有邮件列表信息以及某个邮件信息(springboot)

    1.依赖 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selen ...

  4. Python+Selenium自动化测试——126邮箱自动登录脚本(登录首页是二维码,切入账号密码输入框)

    Python+Selenium自动化测试--126邮箱自动登录脚本 版权声明:本文为博主原创文章,未经允许不得转载.https://blog.csdn.net/qiao_wan/article/det ...

  5. Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】

    Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析 QQ空间说说抓取难度比较大,花了一个星期才研究清楚! 代码请移步到GitHub GitHub地址:http ...

  6. JAVA代码给QQ邮箱发邮件

    通过java代码给qq邮箱发邮件 使用发送邮箱所需要2个jar包 activation.jar    mail.jar 下载链接:https://pan.baidu.com/s/1YA3jgmUNzW ...

  7. 017:Opencv+Selenium模拟QQ邮箱滑块操作

    之前发了一个国航的滑块模拟操作,没有计算滑块到缺口的位置. 本篇则是用opencv+selenium来对QQ邮箱的滑块进行模拟测试. QQ邮箱链接: https://mail.qq.com/ QQ邮箱 ...

  8. java springboot借助qq邮箱发送验证码

    1.起因 主流的短信验证无论是阿里云还是腾讯云,都是需要收费的,且一般需要企业认证才可以使用.作为学习,我们可以选择无门槛的qq邮箱验证登录的方式. 2.步骤 2.1 访问qq邮箱官网qq邮箱,打开Q ...

  9. mysql备份到邮箱_mysql自动备份发邮件到指定邮箱

    mysql自动备份发邮件到指定邮箱 首先 编写 导出的 命令 使用了 mysqladmin ping mysqldump 然后是 添加附件到邮件中发送 使用了对应的com 最后 暂停 看情况 参考: ...

最新文章

  1. [No0000160]常用C# 正则表达式大全
  2. Leangoo看板标签的用法(scrum敏捷开发)
  3. 关于汉诺塔,C++代码,代码效果演算
  4. 投标报价得分计算程序_什么是投标报价?怎么计算呢?
  5. html怎么帮图片占位,css+html实现Skeleton Screen 加载占位图动画效果(带动画)
  6. 目标检测(四)--ICF
  7. 计算机网络(一)-- 物理层与数据链路层
  8. mongodb的学习过程
  9. java 字面值_Java基础之字面值
  10. python基础(小甲鱼python入门笔记)
  11. 手写spring事务框架-蚂蚁课堂
  12. Groovy从入门到精通
  13. Java实现蓝桥杯快乐数
  14. Unity多人联机框架Mirro学习记录(一)
  15. 罗技c930e摄像头描述符
  16. android音乐播放器开发 SweetMusicPlayer 播放本地音乐
  17. 根据身份证解析出生年月
  18. openoffice java awt_使用openoffice转pdf,详细
  19. linux route 刷新_linux route命令反应很慢是什么原因?
  20. 嵌入式 linux下proc目录下的文件详解

热门文章

  1. 数据分析及可视化——京东上销量最高的鞋子
  2. 基于springboot的在线考试系统的设计与实现 毕业设计毕设参考
  3. 近期刷题小结9.24-10.11
  4. 不容错过的超赞项目管理PPT
  5. 微信小程序(note1:官方文档)
  6. happyhbase
  7. Spring - BeanFactoryPostProcessor 扩展接口
  8. 民间实用土方(下册2)-ZT
  9. 【躲不过的Java “锁事”】一文扫除对Java各种锁的困扰!
  10. 利用百度人脸识别API和pyqt5实现基于人脸识别的可视化课堂签到管理系统