您的位置:首页 > 其它

使用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 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