专栏首页凯哥JavaSelenium+TestNG实战-2 第一个Selenium脚本之登录

Selenium+TestNG实战-2 第一个Selenium脚本之登录

前一篇,我们准备了好wordPress本地环境和eclipse编写脚本环境,这篇,我们新建一个Java main方法,不管什么技巧,框架,什么数据分离,完全是根据selenium的简单几个API来实现wordpress的登录功能。

声明:本文出处 凯哥个人博客网(www.kaigejava.com),发表于凯哥个人博客,未经允许严禁转载

本文地址:http://www.kaigejava.com/article/detail/81

凯哥微信公众号:凯哥Java(kaigejava)

用例:实现自动化登录wordpress站点,具体步骤如下

- 打开浏览器

- 打开本地wp地址

- 点击登录链接

- 输入用户名和密码

- 点击提交

- 验证用户是否登录成功

上面的步骤,和手工测试步骤是一模一样。我们把一个登录场景的自动化拆分成多个子步骤,而且每个子步骤,你几乎都能在selenium API中找到对应的方法来实现。当然,作为新手,你肯定需要多看一些入门的例子,才知道哪些API是什么作用,在这里,我就当做你已经明白本文中出现的selenium 方法的具体实现了什么功能,如果确实小白,那么本文的每行代码就背下来,多敲几遍。本文的举例就是selenium中的hello world,必须明白本文每行代码的作用。

新建一个Login.java,具体代码如下。

package testsuites;

import java.util.concurrent.TimeUnit;

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;

public class Login {

public static void main(String[] args) throws InterruptedException {

// TODO Auto-generated method stub

// 写入一个系统键值,告诉脚本chromedriver.exe的路径,这里是相等当前项目的路径,注意写法,以后经常用到这个写法

System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");

// 创建一个类WebDriver的实例driver,一般习惯写这个变量名称,指浏览器对象

// new ChromeDriver(),新初始化一个google浏览器对象

WebDriver driver = new ChromeDriver();

// 是浏览器窗口最大化

driver.manage().window().maximize();

// 设置隐式等待,下面设置5秒,根据页面加载速度决定

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

// 打开一个页面

driver.get("http://127.0.0.1/wordpress");

// 查找元素,这里找登录链接这个元素

WebElement login_link = driver.findElement(By.xpath(".//*[@id='meta-2']/ul/li[1]/a"));

// 发现登录需要下拉页面到底部,才可以看到,默认显示一个banner的图片

// 利用js 下拉滚动条

//创建一个javascript 执行实例  

        JavascriptExecutor je = (JavascriptExecutor) driver;  

        //执行js语句,拖拽浏览器滚动条,直到该元素到底部,马上就不可以见  

        je.executeScript("arguments[0].scrollIntoView(true);", login_link);  

// 执行点击动作,点击的对象是元素

login_link.click();

// 线程暂停等待

Thread.sleep(1000);

// 定位用户名输入框

driver.findElement(By.id("user_login")).sendKeys("root");

// 输入密码

driver.findElement(By.xpath("//*[@id='user_pass']")).sendKeys("123456");

// 点击登录按钮

WebElement loginBtn = driver.findElement(By.xpath(".//*[@id='wp-submit']"));

loginBtn.click();

Thread.sleep(1000);

// 测试断言部分

// 登录后用户名出现在右上角显示位置的元素定位

WebElement user_nickName = driver.findElement(By.xpath(".//*[@id='wp-admin-bar-my-account']/a/span"));

try {

if(user_nickName.isDisplayed()){

System.out.println("用户登录成功!");

}

}catch (Exception e) {

System.out.println("出现异常" + e.toString());

}

// 测试完成,关闭和退出浏览器

driver.quit();

}

}

运行一下,没有问题,打印出“用户登录成功!”。

通过上面第一个例子,我强制给你灌输了这么几个方法或者概念。

- 浏览器对象初始化的过程,先要写入注册表一个键值,调用插件启动浏览器。这里就用到了Java的多态的知识,ChromeDriver集成了RemoteWebDriver, 而RemoteWebDriver继承WebDriver。

- 浏览器窗口最大化方法

- 隐式等待方法

- Get方法,打开一个站点,参数是url

- 元素可以先声明是一个WebElement类型,然后写元素操作,或者直接driver.这样直接写,两行代码合并一行。

- 元素定位方法,可以是xpath也可以是id,selenium一共支持八种方法定位元素

- Selenium如何执行javascript代码

- 线程等待

- 元素点击操作

- 元素输入操作

- 元素出现在页面的isDisplay方法

- 测试结果断言,if语句,try catch捕获异常

总结:

我们就像模拟手工操作一样,全部动作都写到一个文件代码中,而且完全实现了自动化测试的目的。作为初学者,能写出这样的自动化用例,完全没有毛病和不对的地方。如果确实是第一次接触selenium的人,建议上面的代码,敲个三五遍,熟悉每行代码的意思,如果有必要,可以背下来。因为后面的脚本都是基于本篇的基础操作来实现各种场景的自动化测试脚本。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java核心知识详解:JVM+微服务+分布式+设计模式+数据结构与算法

    JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、

    慕容千语
  • 聊聊Elasticsearch的LazyInitializable

    elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/LazyIniti...

    codecraft
  • 聊聊Elasticsearch的Iterables

    elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/iterable/...

    codecraft
  • 聊聊Elasticsearch的SingleObjectCache

    elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/SingleObj...

    codecraft
  • Dubbo网络通讯篇概述

    从本节开始将深入学习Dubbo网络通讯的底层实现细节,在深入学习Dubbo网络模型时,首先应从整体上了解Dubbo的网络通讯模型、线程模型是怎样的?下图是Dub...

    丁威
  • 类图的6大关系详解

    以下类图使用 PlantUML 绘制,更多语法及使用请参考:http://plantuml.com/ 。

    李红
  • SpringMVC知识点梳理—够你面试掰活的(超详细)

    Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进...

    本人秃顶程序员
  • 未来是不是真的有只会python和不会python的小学生

    Python火了,有的人说这都是培训机构搞得鬼,但是我觉得你是不太高看培训机构了?他们有能力让那么多人疯狂学习Python编程?他们有能力让那么多大企业使用Py...

    诸葛青云
  • 聊聊Elasticsearch的CachedSupplier

    elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/CachedSup...

    codecraft
  • 源码分析Dubbo事件派发机制

    从官网我们得知,Dubbo协议是使用单一长连接来进行网络传输,也就是说服务调用方持久与服务提供者建立一条连接,所有的服务调用调用信息通过。 一条TCP连接进行传...

    丁威

扫码关注云+社区

领取腾讯云代金券