使用selenium自动发送QQ邮件(二)
2017-06-13 14:59
411 查看
本自动化使用Junit4测试框架,写了五个自动化测试用例,代码篇幅有点长,我就每个测试用例分开讲解好了。
首先是driver和MainPage对象作为全局变量,方便使用。
WebDriver driver = new FirefoxDriver();
MainPage mainpage;
然后是@Before部分,因为每次发送邮件都要进行登录,点击写信然后进入写信页面,所以将这些操作全部放在@Before中。登录后,需要等写信链接出现才能点击,所以在此使用了显示等待,重写了apply方法。
@Before
public void before()
{
driver.get("https://mail.qq.com/");
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.linkText("帐号密码登录")));
LoginPage loginpage = new LoginPage(driver);
loginpage.login("123456789", "*********"); //需要测试的自己写扣扣号啦~~~
try{
//等待主页面展示
wait.until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.linkText("写信"));
}
});
} catch(NoSuchElementException e)
{
Assert.fail("进入写信页面失败");
e.printStackTrace();
}
}
顺便先说下@After部分了,每次发送邮件完成后,driver基本上是停留在mainFrame中的,所以要先退出到主window中才能点击退出链接。
@After
public void after()
{
//退出登录
driver.switchTo().defaultContent();
mainpage.logout();
driver.quit();
}
接下来就写几个用例来验证下这代码行不行得通了。
用例一:收信人为1位,且收信人邮箱存在,预期结果:发送成功。
@Test
public void testUserByOne() {
mainpage = new MainPage(driver);
mainpage.toWrite();
//写信
ArrayList<String> users = new ArrayList();
users.add("test@163.com;");
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "hello,hcm");
try
{
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.id("sendinfomsg"));
}
});
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
用例二:测试收件人数量为上限时是否能发送成功。预期结果:成功。
@Test
public void testUsersLimit()
{
mainpage = new MainPage(driver);
mainpage.toWrite();
//假设收件人最多可以放30个
ArrayList<String> users = new ArrayList();
int num = 0;
while(num<30)
{
String mailbox = "forTest00"+num+"@111.com;";
users.add(mailbox);
num++;
}
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "just test");
try
{
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.id("sendinfomsg"));
}
});
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
用例三:测试有收件人数量超过上限时是否能发送成功。预期结果:失败,并提示收件人过多
用例四:收件人为空时。预期结果:提示收件人为空
@Test
public void testUserEmpty()
{
mainpage = new MainPage(driver);
mainpage.toWrite();
ArrayList<String> users = new ArrayList();
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "just test");
try
{
//展示错误信息的span是处于window窗口而不是frame窗口,所以driver要先回到window中才能定位到错误信息
driver.switchTo().defaultContent();
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.className("errmsg"));
}
});
Assert.assertEquals("请填写收件人后再发送", sendinfomsg.getText());
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
用例五:邮箱格式错误。预期结果:弹出提示。
@Test
public void testUserWrongAdress()
{
mainpage = new MainPage(driver);
mainpage.toWrite();
ArrayList<String> users = new ArrayList();
users.add("ll@ll");
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "just test");
try
{
//展示错误信息的span是处于window窗口而不是frame窗口,所以driver要先回到window中才能定位到错误信息
driver.switchTo().defaultContent();
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.className("errmsg"));
}
});
Assert.assertEquals("地址错误,请重新填写", sendinfomsg.getText());
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
首先是driver和MainPage对象作为全局变量,方便使用。
WebDriver driver = new FirefoxDriver();
MainPage mainpage;
然后是@Before部分,因为每次发送邮件都要进行登录,点击写信然后进入写信页面,所以将这些操作全部放在@Before中。登录后,需要等写信链接出现才能点击,所以在此使用了显示等待,重写了apply方法。
@Before
public void before()
{
driver.get("https://mail.qq.com/");
WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.linkText("帐号密码登录")));
LoginPage loginpage = new LoginPage(driver);
loginpage.login("123456789", "*********"); //需要测试的自己写扣扣号啦~~~
try{
//等待主页面展示
wait.until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.linkText("写信"));
}
});
} catch(NoSuchElementException e)
{
Assert.fail("进入写信页面失败");
e.printStackTrace();
}
}
顺便先说下@After部分了,每次发送邮件完成后,driver基本上是停留在mainFrame中的,所以要先退出到主window中才能点击退出链接。
@After
public void after()
{
//退出登录
driver.switchTo().defaultContent();
mainpage.logout();
driver.quit();
}
接下来就写几个用例来验证下这代码行不行得通了。
用例一:收信人为1位,且收信人邮箱存在,预期结果:发送成功。
@Test
public void testUserByOne() {
mainpage = new MainPage(driver);
mainpage.toWrite();
//写信
ArrayList<String> users = new ArrayList();
users.add("test@163.com;");
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "hello,hcm");
try
{
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.id("sendinfomsg"));
}
});
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
用例二:测试收件人数量为上限时是否能发送成功。预期结果:成功。
@Test
public void testUsersLimit()
{
mainpage = new MainPage(driver);
mainpage.toWrite();
//假设收件人最多可以放30个
ArrayList<String> users = new ArrayList();
int num = 0;
while(num<30)
{
String mailbox = "forTest00"+num+"@111.com;";
users.add(mailbox);
num++;
}
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "just test");
try
{
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.id("sendinfomsg"));
}
});
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
用例三:测试有收件人数量超过上限时是否能发送成功。预期结果:失败,并提示收件人过多
@Test public void testUsersOverLimit() { mainpage = new MainPage(driver); mainpage.toWrite(); //假设收件人最多可以放30个 ArrayList<String> users = new ArrayList(); int num = 0; while(num<50) { String mailbox = "forTest00"+num+"@111.com;"; users.add(mailbox); num++; } WriteLetter write = new WriteLetter(driver); write.writeLetter(users, "test", "just test"); try { //展示错误信息的span是处于window窗口而不是frame窗口,所以driver要先回到window中才能定位到错误信息 driver.switchTo().defaultContent(); WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){ public WebElement apply(WebDriver d) { return d.findElement(By.className("errmsg")); } }); Assert.assertEquals("收件人过多,请减少收件人数量", sendinfomsg.getText()); }catch(NoSuchElementException e){ Assert.fail("发送失败"); e.printStackTrace(); } }
用例四:收件人为空时。预期结果:提示收件人为空
@Test
public void testUserEmpty()
{
mainpage = new MainPage(driver);
mainpage.toWrite();
ArrayList<String> users = new ArrayList();
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "just test");
try
{
//展示错误信息的span是处于window窗口而不是frame窗口,所以driver要先回到window中才能定位到错误信息
driver.switchTo().defaultContent();
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.className("errmsg"));
}
});
Assert.assertEquals("请填写收件人后再发送", sendinfomsg.getText());
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
用例五:邮箱格式错误。预期结果:弹出提示。
@Test
public void testUserWrongAdress()
{
mainpage = new MainPage(driver);
mainpage.toWrite();
ArrayList<String> users = new ArrayList();
users.add("ll@ll");
WriteLetter write = new WriteLetter(driver);
write.writeLetter(users, "test", "just test");
try
{
//展示错误信息的span是处于window窗口而不是frame窗口,所以driver要先回到window中才能定位到错误信息
driver.switchTo().defaultContent();
WebElement sendinfomsg = (new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>(){
public WebElement apply(WebDriver d)
{
return d.findElement(By.className("errmsg"));
}
});
Assert.assertEquals("地址错误,请重新填写", sendinfomsg.getText());
}catch(NoSuchElementException e){
Assert.fail("发送失败");
e.printStackTrace();
}
}
相关文章推荐
- 使用selenium自动发送QQ邮件(一)
- java使用JMail通过QQ邮件服务器实现自动发送邮件
- vbs-获取公网IP调用邮件控件实现邮件的自动发送到指定邮箱-可直接使用复制使用
- Linux下监控磁盘使用量并在超过阀值后自动发送报警邮件
- CI框架使用PHPmail插件发送QQ邮件:
- 使用QQ的SMTP发送邮件
- python使用qq服务器发送邮件
- Linux下使用mutt自动发送邮件
- 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)
- python使用smtplib库和smtp.qq.com邮件服务器发送邮件(转)
- 使用expect自动发送邮件的脚本
- 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)
- 在代理环境下如何使用IdSMPT自动发送邮件如果
- python使用smtplib库和smtp.qq.com邮件服务器发送邮件
- asp定时自动查询自己的外网ip并发送到邮箱【邮件的使用的组件是jmail】
- 使用 Cmdlet Extension Agents 自动发送用户欢迎邮件
- 使用Outlook Connector插件之后 qq发送过来的邮件为乱码 推荐
- [selenium]实现自动登录163邮箱并发送邮件
- 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)
- 使用Spring Mail发送QQ邮件