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

本文介绍了一套基于Junit4框架的QQ邮箱自动化测试方案,包括登录、写信、发送等流程的实现细节,并通过五个具体测试用例验证了其有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值