自动化测试——QQ邮箱登陆

news/2024/11/8 7:14:58/

Selenium+TestNG+Maven+IDEA

前言:

Selenium是Web UI自动化测试套件之一,它支持不同浏览器(CHrome,Mozilla Firefox,Internet Explorer,Edge,Opera,Safari等),平台(Android,iOS,Windows,Linux,Mac,Solaris。)和编程语言(Java/Python/C#等)的自动化,是一款开源的和可移植的web测试框架。

Selenium可以与TestNG等测试框架集成,以进行应用程序测试和生成报告。

本篇通过编写qq邮箱登陆的测试脚本,介绍一下如何将Selenium与TestNG集成。

selenium和webdriver区别

当Selenium2.x 提出了WebDriver的概念之后,它提供了完全另外的一种方式与浏览器交互。那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)。由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等。(包括了AndroidDriver和iOS WebDriver)

一、qq邮箱登陆场景描述:

1.打开Chrome 浏览器,打开腾讯邮箱登陆页面https://mail.qq.com/;

2.输入qq号和qq密码;

3.单击登陆按钮;

4.关闭浏览器。

二、测试脚本:

1.TestNgProj项目中创建SeTest.java。

TestNgProj:https://github.com/X-NaN/TestNgProj

2.下载chromedriver.exe。

由于测试脚本中操作的是Chrome浏览器,因此需要首先下载chromedriver.exe。下载地址:http://npm.taobao.org/mirrors

下载完成后,我直接将chromedriver.exe放在了项目中driver文件夹下。

注意:TestNgProj项目中的chromedriver.exe是Mac OS的,window系统的需要下载对应的chromedriver.exe。

如下图是TestNgProj项目目录结构:

3.编写QQ邮箱登陆的测试脚本

package com.xnn.selenium;import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;public class SeTest {@BeforeClasspublic void beforeClass(){System.out.println("test start...");}@AfterClasspublic void afterClass(){System.out.println(" test end...");}/*** 提供参数* 通过@DataProvider将参数传递给@Test方法* @return*/@DataProvider(name = "loginData")public Object[][] provideData(){return new Object[][] { { "1186711035", "*" }};//qq号和密码,这里可以改成自己的QQ号和密码}@Test(dataProvider = "loginData")public void login(String qqNumber,String pwd){//1.调用Chrome浏览器//2。打开qq邮箱首页//3。输入qq号/密码//4。点击登录按钮//设置驱动位置System.setProperty("webdriver.chrome.driver","driver/chromedriver");//Chrome浏览器驱动WebDriver driver=new ChromeDriver();//打开qq email首页driver.get("https://mail.qq.com/");//获取页面标题String title=driver.getTitle();System.out.println("title=>"+title);//qq号输入框和密码输入框在iframe中driver.switchTo().frame("login_frame");//输入qq号driver.findElement(By.id("u")).sendKeys(qqNumber);//输入qq密码driver.findElement(By.id("p")).sendKeys(pwd);//点击"登录"按钮driver.findElement(By.id("login_button")).click();//元素及其值加载出来需要时间try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}String useraddr="1186711035@qq.com";WebElement addr= driver.findElement(By.id("useraddr"));//断言Assert.assertEquals(useraddr,addr.getText());driver.close();}}

三、在执行测试脚本时遇到的问题:

1.找不到qq号输入框

可是查找页面源码,明明可以看到QQ号输入框的ID为“u”。

原因:QQ号输入文本框在iframe中,这时通过driver.findElement(By.id("u")).sendKeys(qqNumber);根据id/name/xpath是定位不到元素的。需要先切换到对应的iframe

driver.switchTo().frame("login_frame");

然后再在iframe中定位元素。

2.在判断是否登陆成功时,找不到元素“useraddr”

这里我判断登陆是否成功的思路是:如果输入用户名密码正确,页面会跳转到邮箱首页,其中首页元素”useraddr“会显示用户的邮箱地址,如下图所示。这里可以将testNG的断言与selenium集成。

但是在运行测试脚本的时候出错了,如下图。

 

 

原因:元素出现的时间有延迟,需要设置等待时间。

现在的网页中很多是有ajax交互的,你要寻找元素的时候,有可能是基于上面的步骤操作,才出现这个元素,而且由于网络的原因,元素加载可能需要一定的时间,所以这里一定要在查找元素的时候使用等待。

所以,需要在定位元素,获取元素值前设置等待时间。

四、总结

本文将selenim与testNG集成,编写了QQ邮箱登陆的测试脚本。WebDriver  API可以操作web UI,testNG执行测试用例,是数据驱动的测试,其测试数据由@DataProvider注解的方法provideData()提供,使得测试数据与测试用例分离,方便使用不同的数据进行测试。

源码:https://github.com/X-NaN/TestNgProj/blob/master/src/test/java/com/xnn/selenium/SeTest.java

对于selenium中页面元素未找到,可能原因有:

1.定位是否写正确,如根据id查找的id是否在页面中存在;

2.待定位的页面元素是否在iframe中,如果在iframe中,需要首先切换到iframe,然后再根据id/name/xpath等定位元素;

3.在页面跳转后定位元素,则因为ajax交互或者网络原因,元素出现的时间有延迟,需要设置等待时间;

4.元素是否在另外的窗口中,如在操作过程中打开了新窗口,则需要切换到新窗口,在新窗口中定位和操作元素


http://www.ppmy.cn/news/311879.html

相关文章

手机号邮箱怎么注册?邮箱登陆163登录入口

公司一直都是用邮箱沟通交流的,新入职同事问我怎么注册邮箱,了解到他的岗位需要经常外出,就告诉他可以用手机邮箱,于是,告诉他注册TOMVIP邮箱就可以。同时简要整理了手机邮箱怎么注册?注册后的邮箱登陆流程…

实现写邮箱html页面,HTML写的第一个邮箱登陆界面

自己动手去写才会有收获,宁可模仿也不要全部复制粘贴 不说了,直接上代码。CSS有注释,适合新手。Login Winner 记住密码 忘记密码 HTML界面的代码,只负责对数据进行封装。未链接CSS的界面效果如下: CSS部份自己百度的属性都加上注释了,适合新手。 @charset "utf-8&qu…

126邮箱登录html,126邮箱登陆界面

大家常常会使用一些手机软件,怎么登录126邮箱,操作简单,容易理解,下面大家一起来学习一下吧。 网易邮箱大师6.10.3 苹果7IOS12 安装并运行网易邮箱大师客户端。 在登录栏中填写126邮箱账号。 在密码栏填写邮箱密码。 找到并点击添…

邮箱登陆html,用html写的简单的邮箱登陆界面

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。 编程之家小编现在分享给大家,也给大家做个参考。qiqi.html function MyBlur(obj){if(document.all.mailcheck.value=="1"){var m_suffix1 = document.getElementByIdx_x("m_163"); m_suffix1.style.…

电脑怎么登陆邮箱,登陆邮箱忘记密码怎么办?

大家或许习惯在网页端搜索登陆163vip邮箱并选择保存密码,在客户端登录之后就不会再输入密码。HR统计账密或你需要更换电脑重新登陆邮箱时忘记密码怎么办?电脑怎么登陆邮箱呢?不要着急看看这篇干货吧! 电脑怎么登陆邮箱&#xff…

双核奔腾超频冲上5.8GHz,暴涨87%

自从发现非K系列12代酷睿能够BCLK外频超频,现在高玩们冲记录都选择了中低端的12代酷睿,甚至奔腾、赛扬处理器,其中售价64美元的双核奔腾G7400T被超频到了5.8GHz,相比默认频率暴涨87%。 12代处理器中奔腾系列有两款型号&#xff0…

奔腾双核和酷睿双核有什么区别啊?

就先用台式机的CPU跟你解释吧,现在奔腾系列的台式机里面有两种双核,一种诞生在酷睿2之前,叫奔腾D,一种诞生在酷睿2之后,较奔腾E。奔腾D是蹩脚双核,高频低能,功耗发热量都极大,所以已…

双核CPU和双CPU的区别

双核心并不是一个新概念,而只是CMP(Chip Multi Processors ,单芯片多处理器) 中最基本、最简单、最容易实现的一种类型。 换言之双核心处理器就是基于单个半导体的一个处理器上拥有两个一样功能的处理器核心。这样就将两个物理处理器核心整合入一个核中&…