使用selenium自动发送QQ邮件(二)

来源:互联网 发布:北京外国语大学网络教 编辑:程序博客网 时间:2024/06/05 07:17
       本自动化使用Junit4测试框架,写了五个自动化测试用例,代码篇幅有点长,我就每个测试用例分开讲解好了。

       首先是driver和MainPage对象作为全局变量,方便使用。

       WebDriver driver = new FirefoxDriver();
       MainPage mainpage;

       然后是@Before部分,因为每次发送邮件都要进行登录,点击写信然后进入写信页面,所以将这些操作全部放在@Before中。登录后,需要等写信链接出现才能点击,所以在此使用了显示等待,重写了apply方法。

        @Beforepublic 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中才能点击退出链接。

        @Afterpublic void after(){//退出登录driver.switchTo().defaultContent();mainpage.logout();driver.quit();}
 

          接下来就写几个用例来验证下这代码行不行得通了。

        用例一:收信人为1位,且收信人邮箱存在,预期结果:发送成功。

        @Testpublic 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();} }

          用例二:测试收件人数量为上限时是否能发送成功。预期结果:成功。

        @Testpublic 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();}}

         用例三:测试有收件人数量超过上限时是否能发送成功。预期结果:失败,并提示收件人过多
        @Testpublic 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();}}

          用例四:收件人为空时。预期结果:提示收件人为空

        @Testpublic 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();        }        }



  

原创粉丝点击