admin管理员组

文章数量:1639996

本套自动化ui是基于java+selenium+testNG。
涉及到frame的切换,xpath的定位,页面标签分析。Testng执行的先后顺序。

QQ邮箱登录;

用谷歌打开qq邮箱登录页面F12打开查看里面的内容;


从上面的两张截图可以看出来 微信登录与qq登录所要找的iframe的id是一样的,所以
1.登录前必须先点击QQ登录,然后切到id为login_frame 的iframe页面中
2.找到输入用户名与密码的标签,根据id获取到并运用sendKeys输入,找到登录按钮点击登录
下面是新建一个maven项目,配置好pom文件:

<dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.9.1</version>
        </dependency>

新建testNG类,用@BeforeClass来注解,只要此测试类运行必须先运行它。
源码

public class Qlogin {
      WebDriver webDriver =null;

     @BeforeClass
    public void  login() {

         File file = new File("D:\\driver\\chromedriver.exe");
         System.setProperty("webdriver.chrome.driver",file.getAbsolutePath());
         webDriver = new ChromeDriver();
         try {
             //获取qq邮箱连接
             webDriver.get("https://mail.qq");
             //给页面加载时间,避免未加载造成获取不到元素而报错
             Thread.sleep(5000);
             
             //登录页面查看一下是一个frame页面,需要切入
             webDriver.findElement(By.id("qqLoginTab"));
             
			//设置睡眠时间,本人电脑比较慢所以有时候会响应不到
             Thread.sleep(2000);
             webDriver.switchTo().frame("login_frame");

             //通过id获取邮箱的登录名文本框,运用senkeys进行输入
             webDriver.findElement(By.id("u")).sendKeys("*******@qq");
             webDriver.findElement(By.id("p")).sendKeys("*********");
             
             //运用click进行点击操作
             webDriver.findElement(By.id("login_button")).click();
             Thread.sleep(2000);

         }catch (Exception  e){
         
         //因为webdriver还需要用所以没有finally处理
           webDriver.quit();
           
           System.out.println("邮箱登录异常运行异常");
         }

     }

注意在新手调试时一点要try,catch,不然进程会n多个。
**

发送邮箱

**
老套路先看页面源码

1.找到写信的所在的标签,看到该标签与其他iframe平级的,主iframe的ID为(mainFrame)进行选择页面切入并获取该标签用click进行点击操作模拟
切入iframe的ID为(mainFrame)的页面,括号中可以为id,class的String类型的value,也可以是一个webElement类型的对象:

  webDriver.switchTo().frame("mainFrame");

2.页面跳转后用同样的方法查询到“普通邮件”,“收件人”,“主题”,以及“添加附件”操作都在已切换的页面中就不用再次选择iframe页面了。
3.特别注意正文是一个子iframe所以在输入正文是一定要先切入子frame表单看下图:

4.切入子页面完成正文输入后一定要切回原来父iframe:

 //切入子iframe页面
 webDriver.switchTo().frame(webDriver.findElement(By.className("qmEditorIfrmEditArea")));
  //切回父页面
 webDriver.switchTo().parentFrame();

5.进行发送操作,
发送成功后,通过页面内容确认是否发送成功
获取标签文本内容:

 String value = webDriver.findElement(By.xpath("//*[@id=\"sendinfomsg\"]")).getText();

运用testNG 的Assert方法来比较是否满足预期值:

 Assert.assertEquals("您的邮件已发送", value);

最后运行完毕一定要finally 关闭webdriver
下面是已经运行成功的源码:

 @Test
    public void writeMil(){
         try {
             //登录成功等待页面加载3秒
             Thread.sleep(3000);

			//通过xpath点击写信
             webDriver.findElement(By.id("composebtn")).click();
             
             //等待页面加载1秒
             Thread.sleep(1000);
             
             //通过页面元素发现该页面有不止一个iframe表单,进入要操作的页面
             webDriver.switchTo().frame("mainFrame");
             
             //选择普通邮件
             webDriver.findElement(By.xpath("//*[@id=\"frm\"]/table/tbody/tr/td[1]/div[2]/div")).click();
             Thread.sleep(2000);

             //输入要发送邮箱的地址
             webDriver.findElement(By.xpath("//*[@id=\"toAreaCtrl\"]/div[2]/input")).sendKeys("********@qq");
             
             //输入标题
             webDriver.findElement(By.id("subject")).sendKeys("testSelenium");
             //运用sendKeys添加附件     
             webDriver.findElement(By.xpath("//[@id=\"AttachFrame\"]/span/input")).sendKeys("C://Users\\Lenovo\\Desktop\\selenium学习心得.docx");
               
             Thread.sleep(1000);
             
             //正文在另外一个iframe下 所以需要切换iframe
             webDriver.switchTo().frame(webDriver.findElement(By.className("qmEditorIfrmEditArea")));
             
             //输入正文信息
             webDriver.findElement(By.tagName("body")).sendKeys("要发送一个邮箱请注意查收");
             
            //跳转到原iframe表单
             webDriver.switchTo().parentFrame();
             
             //点击发送
             webDriver.findElement(By.xpath("//*[@id='toolbar']/div/a[1]")).click();
             
             //等待页面加载发送成功页面
             Thread.sleep(5000);
			 //切入发送成功iframe页面
             webDriver.findElement(By.xpath("//*[@id=\"sendinfomsg\"]"));
             //获取页面发送成功的关键信息
             String value = webDriver.findElement(By.xpath("//*[@id=\"sendinfomsg\"]")).getText();
             System.out.println(value);
             
             //判断邮箱是否发送成功
             Assert.assertEquals("您的邮件已发送", value);
             
         }catch (Exception E){
        	 //异常关闭
             webDriver.quit();
             System.out.println("邮箱发送运行异常");
         }finally {

			//运行完毕进行关闭
             webDriver.quit();

         }

     }

可以右键直接运行该test,当写的测试类多的时候也可以通过testNG的xml进行配置后运行:
testNG的xml的demo;

<?xml version="1.0" encoding="UTF-8"?>
<suite name="qqMile">

<test name="TestqqMile">
    <classes name ="发送邮箱">
        <class
                name="qqlogin.Qlogin">
        </class>
    </classes>
</test>

</suite>

运行结果:

本文标签: 邮箱seleniumJavaqqtestng