Java+Selenium实现QQ邮箱自动登录、发邮件与退出
初学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定位常见的几个方法有如下几个:
- driver.switchTo().frame();
可以通过index、id、name、WebElement对象传值地位。 - driver.switchTo().parentFrame();
从子frame返回到父frame中。 - driver.switchTo().defaultContent();
从当前frame中切回主文档。
Java+Selenium实现QQ邮箱自动登录、发邮件与退出相关推荐
- selenium实现163邮箱自动登录
1.报错1:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate ...
- java mail 接受QQ邮箱未读的邮件
案例代码如下 //创建属性对象Properties p = new Properties();p.put("mail.imap.auth.login.disable", " ...
- java+selenium 获取QQ邮箱所有邮件列表信息以及某个邮件信息(springboot)
1.依赖 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selen ...
- Python+Selenium自动化测试——126邮箱自动登录脚本(登录首页是二维码,切入账号密码输入框)
Python+Selenium自动化测试--126邮箱自动登录脚本 版权声明:本文为博主原创文章,未经允许不得转载.https://blog.csdn.net/qiao_wan/article/det ...
- Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】
Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析 QQ空间说说抓取难度比较大,花了一个星期才研究清楚! 代码请移步到GitHub GitHub地址:http ...
- JAVA代码给QQ邮箱发邮件
通过java代码给qq邮箱发邮件 使用发送邮箱所需要2个jar包 activation.jar mail.jar 下载链接:https://pan.baidu.com/s/1YA3jgmUNzW ...
- 017:Opencv+Selenium模拟QQ邮箱滑块操作
之前发了一个国航的滑块模拟操作,没有计算滑块到缺口的位置. 本篇则是用opencv+selenium来对QQ邮箱的滑块进行模拟测试. QQ邮箱链接: https://mail.qq.com/ QQ邮箱 ...
- java springboot借助qq邮箱发送验证码
1.起因 主流的短信验证无论是阿里云还是腾讯云,都是需要收费的,且一般需要企业认证才可以使用.作为学习,我们可以选择无门槛的qq邮箱验证登录的方式. 2.步骤 2.1 访问qq邮箱官网qq邮箱,打开Q ...
- mysql备份到邮箱_mysql自动备份发邮件到指定邮箱
mysql自动备份发邮件到指定邮箱 首先 编写 导出的 命令 使用了 mysqladmin ping mysqldump 然后是 添加附件到邮件中发送 使用了对应的com 最后 暂停 看情况 参考: ...
最新文章
- [No0000160]常用C# 正则表达式大全
- Leangoo看板标签的用法(scrum敏捷开发)
- 关于汉诺塔,C++代码,代码效果演算
- 投标报价得分计算程序_什么是投标报价?怎么计算呢?
- html怎么帮图片占位,css+html实现Skeleton Screen 加载占位图动画效果(带动画)
- 目标检测(四)--ICF
- 计算机网络(一)-- 物理层与数据链路层
- mongodb的学习过程
- java 字面值_Java基础之字面值
- python基础(小甲鱼python入门笔记)
- 手写spring事务框架-蚂蚁课堂
- Groovy从入门到精通
- Java实现蓝桥杯快乐数
- Unity多人联机框架Mirro学习记录(一)
- 罗技c930e摄像头描述符
- android音乐播放器开发 SweetMusicPlayer 播放本地音乐
- 根据身份证解析出生年月
- openoffice java awt_使用openoffice转pdf,详细
- linux route 刷新_linux route命令反应很慢是什么原因?
- 嵌入式 linux下proc目录下的文件详解