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.元素是否在另外的窗口中,如在操作过程中打开了新窗口,则需要切换到新窗口,在新窗口中定位和操作元素

自动化测试——QQ邮箱登陆相关推荐

  1. python3+selenium实现qq邮箱登陆并发送邮件

    基于selenium,使用chrome浏览器,完成qq邮箱登陆并发送发邮件功能,暂时未封装.qq邮箱和126邮箱登陆还是有一些区别的. #encoding=utf-8 from selenium im ...

  2. web自动化测试——QQ邮箱登录之Bussiness(login)登录操作

    from Commomlib.Commonlib import Commonclass Login(Common):'''继承Common类'''def login(self, user, pwd): ...

  3. 自动化测试QQ邮箱登录【问题及完整测试代码】

    一.问题描述: 使用百度搜索QQ邮箱,点击邮箱官网进入QQ邮箱首页后,切换到iframe中报错(无法找到元素). 二.代码描述: from selenium import webdriver impo ...

  4. 【Class 51】【Python实例】自动控制浏览器 登陆QQ邮箱发送邮件,内容为鼠标复制的文本

    命令行邮件程序 编写一个程序,通过命令行 QQ邮箱登陆账号.邮箱密码.接受电子邮件地址.邮件主题 然后利用 selenium登录到你的邮件账号,将鼠标剪贴板中复制的内容作为邮件,发送到提供的地址. 如 ...

  5. python爬取qq邮箱_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  6. python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  7. oracle qq邮箱不能用,QQ邮箱怎么不能用?QQ邮箱崩了官方公告

    很久不用一次的QQ邮箱出现了大规模的崩溃,在5月6日突然有小伙伴反映,QQ邮箱PC端出现报错,就算是换了浏览器也没有用,那么这究竟是什么情况?我们可以从官方给出的公告来了解,遇到这个问题的用户一起来看 ...

  8. python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  9. 360自家产品打脸:出现QQ邮箱钓鱼广告,打开还会被360卫士拦截

    首先是百度的尴尬.近期有网友在百度搜索QQ邮箱登陆的时候,出现在顶置位置的付费广告竟然是高仿版的且经过认证的钓鱼网站.此钓鱼网站持有百度搜索域名认证,归属于宿迁某某电子商务有限公司.此后百度在接到反馈 ...

最新文章

  1. 20151130语法基础
  2. 浪潮各机型前面板指示灯含义
  3. ASP.NET防止按F5键造成表单重复提交
  4. Hive 数仓中常见的日期转换操作
  5. 全局脚手架了解一下【fle-cli】
  6. GDI对象存储和查看lib文件导出函数
  7. 被低估的css滤镜,你所不知道的 CSS 滤镜技巧与细节
  8. SQL注入到EXP编写
  9. MyBatis 关系映射XML配置
  10. 学习使用Bing Maps Silverlight Control(一):准备和新建
  11. java方法传对象参数_Java方法中的参数太多,第2部分:参数对象
  12. 今天我勇敢的点就一个gpio口
  13. 【javascript】js实现复制、粘贴
  14. 厉害了!春节不打烊年货30分钟即买即送 饿了么新上线650多家超市
  15. OracleXE安装完成后 http://127.0.0.1:8080/apex 总是在刷新无法打开
  16. 思科交换技术之vlan
  17. 我行我素购物管理系统
  18. win11配置mysql环境变量保姆级教程
  19. 简单的朴素贝叶斯算法实现英文文本分类(Python实现)
  20. Rust语言教程(2) - 从熟悉的部分开始

热门文章

  1. 大学计算机课程制作生日卡片,DIY手工制作生日贺卡
  2. 张凯龙 西北工业大学计算机学院,西北工业大学计算机学院研究生不在校管理规定...
  3. 最常见的运放LM358简要功能介绍(抄原理图)
  4. [Trie]P4551
  5. 【Linux操作系统】进程概念详解
  6. 搞了一个论坛玩玩!http://lupeiqing.3322.org/bbs
  7. 完美世界GameJam参加报告——《解字》游戏的设计与开发
  8. sql server 中 SET ROWCOUNT 的具体用法
  9. 解密:IT运维艺术之负载均衡之术
  10. Reconstruction and Representation of 3D Objects with Radial Basis Functions 阅读笔记