WEB自动化测试_2Selenium基础

选择浏览器

一、打开Firefox浏览器

1 导入包

import org.openqa.selenium.*;
import org.openqa.selenium.WebDriver.*;
import org.openqa.selenium.firefox.*;

2 打开Firefox浏览器

// 若不是按照默认路径安装Firefox,则需要设置以找到firefox.exe路径
// System.setProperty("webdriver.firefox.bin","E:\\Firefox\\firefox.exe");
WebDriver driver = new FirefoxDriver();

二、打开IE浏览器

WebDriver driver = new InternetExplorerDriver();

三、打开Chrome浏览器

WebDriver driver = new ChromeDriver();



浏览器导航对象Navigation

通过WebDriver的Navigate()方法获得Navigation对象实例;

Navigation navigation = driver.navigate();

一、访问某个网页

1 不使用navigation对象

driver.get("http://photo.163.com");

2 使用navigation对象

navigation.to("http://photo.163.com");
// 或 driver.navigate().to("http://photo.163.com");

二、返回上一个访问的网页

navigation.back();
// 或 driver.navigate().back();

三、从上次访问页面前进到下一个页面

navigation.forward();
// 或 driver.navigate().forward();

四、刷新当前页面

navigation.refresh();
// 或 driver.navigate().refresh();




元素定位

一、回顾

// 初始化一个FirefoxDriver类的对象,名叫driver
WebDriver driver = new FirefoxDriver();

// 使用driver对象打开youdao首页
driver.get("http://www.youdao.com");

// 使用driver对象HTML属性id等于"translateContent"的对象,即有道搜索的输入框,名叫element
WebElement element = driver.findElement(By.id("translateContent"));

// 向element输入框对象中输入“Selenium”关键字
element.sendKeys("Selenium");

先找到需要操作的元素对象,如driver/ element,使用该对象调用相应的API方法,如get()/ sendKeys(),再传入数据,如"Selenium",进行预设的自动化操作。

二、UI自动化语法

UI自动化语法 = 对象 + 操作 + 数据

对象 操作 数据
浏览器driver 打开get http://www.youdao.com
浏览器driver 寻找元素findElement By.id("translateContent")
输入框element 输入sendKeys Selenium

三、Web元素定位语法

在每一个Web页面中有大量Web元素,如按钮、链接、图片、文字等;

在Selenium Web中,页面上每一个Web元素都可对应到WebElement对象,WebElement对象可通过WebDriver的实例获取;

Selenium提供寻找Web元素的方法findElement,在Java中通过定位器By查找Web元素。

1 元素ID——有效、推荐!

<pre name="code" class="html"><input id="translateContent" type="text" placeholder="在此输入要翻译的单词或文字" autocomplete="off" maxlength="256" onfocus="this.select()" onmouseover="this.focus()" name="q">
 
 

WebElement element = driver.findElement(By.id("translateContent"));

2 元素Name

<input id="translateContent" type="text" placeholder="在此输入要翻译的单词或文字" autocomplete="off" maxlength="256" onfocus="this.select()" onmouseover="this.focus()" name="q">

WebElement element = driver.findElement(By.name("q"));

3 元素Class Name

<a class='test example'>testExample</a>

WebElement element = driver.findElement(By.className("test"));
// 或
WebElement element = driver.findElement(By.className("example"));

注意:By.className 找的是单个class,<a class="test example"/>表示这个标签有两个class分别为test和example,其中的空格是分隔符的意思。

4 超链接文本

<a href="http://www.youdao.com/about/">关于有道</a>

WebElement element = driver.findElement(By.linkText("关于有道"));

5 缺省超链接文本

5.1 获取第一个匹配的链接对象

WebDriver element = driver.findElement(By.partialLinkText("有道"));

5.2 获取所有匹配的链接对象,存储在List容器变量

List<WebElement> elements = driver.findElements(By.partialLinkText("有道"));

注意:findElements()方法返回一个元素集合的List。

6 元素Tag Name

<span class="active">精选阅读</span>
WebElement element = driver.findElement(By.tagName("span"));

注意:如果页面上存在多个满足条件的元素,findElement()方法只会返回页面树状结构中自上而下的第一个匹配元素。

7 Xpath

XPath定位方式是自动化测试定位技术中必杀技;

<input id="translateContent" type="text" placeholder="在此输入要翻译的单词或文字" autocomplete="off" maxlength="256" onfocus="this.select()" onmouseover="this.focus()" name="q"/>
WebElement element = driver.findElement(By.xpath("//input[@id='translateContent']"));




操作页面元素WebElement

一、单击

element.click();

注意:对于勾选或取消复选框和单选框,没有check/ uncheck方法;对于选择下拉列表框,没有select方法,只能使用click方法模拟;

二、输入

给input元素输入文本;

element.sendKeys("sissiy_express");

三、清除

清空input元素的值;

element.clear();

四、提交

对制定元素所在的form元素进行提交;

element.submit();

如输入帐号和密码,再对密码文本框使用submit()方法,而不是单击“登录”按钮;




获取页面及页面元素的内容

一、获取当前页面的标题

System.out.println(driver.getTitle());

二、获取当前页面的URL

System.out.println(driver.getCurrentUrl());

三、获取某个元素的文本值

System.out.println(element.getText());

四、获取复选框或单选框的勾选情况

System.out.println(element.isSelected());

五、获取某个元素的tag名称

System.out.println(element.getTagName());

六、获取input等元素的可编辑状态

System.out.println(element.isEnabled());

七、获取某个元素在页面的显示情况

System.out.println(element.isDisplayed());

八、获取某个属性的值

System.out.println(element.getAttribute("class"));




弹出对话框的处理

一、对话框

JavaSript有3中弹出对话框,即Alert、Confirmation、Prompt;

1 警告对话框Alert

只有一个“确认”按钮;

2 确认对话框Confirmation

需要选择;

3 输入对话框Prompt

需要输入内容;

二、处理

Selenium 2中,弹出对话框统一视为Alert对象,只需调用Alert对象的方法即可;

1 accept()

对Alert、Confirmation、Prompt对话框,单击弹出对话框的确认按钮;

driver.switchTo().alert().accept();

2 dimiss()

对Alert、Confirmation、Prompt对话框,单击弹出对话框的取消按钮;

注意:对于Alert,accept()和dismiss()没有区别,不必使用dismiss();

driver.switchTo().alert().dismiss();

3 sendKeys(keysToSend)

对Prompt对话框,输入文本;

driver.switchTo().alert().sendKeys("卟芝岛");

4 getText()

获取弹出对话框的文本内容;

System.out.println(driver.switchTo().alert().getText());




浏览器多窗口处理

在进行Web测试时,会弹出子窗口,并在多窗口之间进行切换操作;

一、获取窗口的唯一标识符(句柄)

driver.getWindowHandles()获取所有打开窗口的标识符,并将其以集合的形式返回;

String[] handles = new String[driver.getWindowHandles().size()];
driver.getWindowHandles().toArray(handles);
for (int i = 0; i < handles.length; i++)
	System.out.println(handles[i]);

二、切换窗口

driver.switchTo().window(windowName)通过其标识符切换到该窗口,之后可对该窗口进行操作;

WebDriver newdriver = driver.switchTo().window(handles[1]);




设置管理

一、window()

通过window()方法对当前窗口进行简单的控制,如查看窗体的坐标和大小,将其最大化;

// 获取窗体的坐标
System.out.println(driver.manage().window().getPosition().x);
System.out.println(driver.manege().window().getPosition().y);
// 获取窗体的长宽
System.out.println(driver.manage().window().getPosition().width);
System.out.println(driver.manage().window().getPosition().height);
// 将当前窗口最大化
driver.manege().window().maximize();

二、timeouts()

timeouts()方法获取Timeouts对象,该对象包含三种方法:

1 implicitlyWait()

设置脚本在查找元素时的最大等待时间,如findElement()和findElements()方法;

2 setScriptTimeout()

页面操作超时时间,如页面进行跳转或刷新的最大等待时间;

3 pageLoadTimeout()

设置脚本异步执行的超时时间;

// 将脚本在查找元素时的最大等待时间设置为30s
driver.manage().timeouts().implicitlyWait(30, java.util.concurrent.TimeUnit.SECONDS);
// 将页面跳转或刷新的超时时间设置为30s
driver.manage().timeouts().setScriptTimeout(30, java.util.concurrent.TimeUnit.SECONDS);
// 将脚本异步执行的超时时间设置为30s
driver.manage().timeouts().pageLoadTimeout(30, java.util.concurrent.TimeUnit.SECONDS);




结束测试

当测试执行完,结束测试有两种方法,即使用close()方法关闭WebDriver当前所在的窗口,使用quit()方法关闭所有相关窗口。

一般,测试没有结束但需要关闭某个窗口时,使用close()方法关闭指定窗口;测试结束时,使用quit()方法关闭所有相关窗口。

// 切换到指定窗口并关闭
driver.switchTo().window(handles[1]);
Thread.sleep(3000);
driver.close();
// 关闭所有窗口
driver.quit();



基本操作

实例:

1 需求

Web自动化登录网易相册,并创建一个相册

2 步骤

a 开启Firefox浏览器

b 访问http://photo.163.com

c 分别使用错误/正确的网易邮箱帐号登录

d 在该账号下创建一个相册

e 关闭浏览器

3 需求抽象出来的操作

a 打开网页get

WebDriver driver = new FirefoxDriver();
driver.get("http://photo.163.com");

b 输入内容sendKeys

WebElement element = driver.findElement(By.name("username"));
element.sendKeys("[email protected]");
// sendKeys()方法可以传递多个String参数,可以使用拆分字符串的方式输入
// 尤其在有些系统有防机器人的策略,通过拆分字符串输入方式,避免让系统认为是机器人行为
// element.sendKeys("auto", "test1","@163.com");

c 点击元素click

WebElement element = driver.findElement(By.className("js-cur"));
element.click();

d 清空内容clear

WebElement element = driver.findElement(By.name("password"));
element.clear();

e 获取网址getCurrentUrl

WebDriver driver = new FirefoxDriver();
driver.get("http://photo.163.com");
System.out.println(driver.getCurrentUrl());

f 获取页面标题getTitle

System.out.println(driver.getTitle());

g 获取元素文本getText

WebElement element = driver.findElement(By.className("album"));
System.out.println(element.getText());

h 关闭浏览器quit

driver.quit();

4 知识点

4.1 打开网页get

使用方式:

WebDriver支持HTTP/HTTPS,对于网页格式必须严格遵循以http或https开头的原则,否则认为是非法网址

操作特性:

页面完全打开后,get方法才结束

注意:

只保证最初页面完全打开,不判断重定向后页面的打开情况

4.2 输入内容sendKeys

使用对象:


注意:

sendKeys()方法在原来输入内容后追加输入

4.3 点击元素click

使用对象:

click()方法可以操作除不可见元素或宽和高均为0的元素的其他所有元素;


操作特性:

所有元素都可以被点击

注意:

元素不能被遮挡(模拟鼠标,若被广告遮挡,鼠标就在广告页面)

元素不能被隐藏(CSS设置为隐藏的元素,调用click()方法可能抛出元素不可点的异常)

4.4 清空内容clear

使用对象:

WEB自动化测试_2Selenium基础_第1张图片

注意:

整体清除,不是按一下退格的删除

4.5 获取页面标题getTitle

使用对象:

对象是整个页面的title标签,而不是某个元素的title属性。


注意:

若不存在title,则返回NULL。

4.6 获取文案getText

使用对象:

元素闭合标签之间的文本内容,而不是title属性。


注意:

包含子元素中的text内容

元素不能被CSS隐藏

4.7 关闭浏览器quit

注意:

测试结束后不关闭浏览器则会常驻内存,导致内存溢出。


你可能感兴趣的:(WEB自动化测试_2Selenium基础)