糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Java+Selenium实现QQ邮箱自动登录 发邮件与退出

Java+Selenium实现QQ邮箱自动登录 发邮件与退出

时间:2020-08-23 17:29:31

相关推荐

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("/");/*登录*/LoginPage tologin = new LoginPage(driver);tologin.login("123456789", "password");/*点击“写信”按钮*/MainPage towrite = new MainPage(driver);towrite.toWrite();/*写信并发送邮件*/SendemailPage tosendemail = new SendemailPage(driver); tosendemail.writeemail("1234567890@", "这是主题", "恭喜你发送成功!");/*退出*/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邮箱自动登录 发邮件与退出》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。