本自动化使用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 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();
}
}