`

Selenium Web Driver入门

 
阅读更多
1  What is Selenium?
引用
Selenium automates browsers. That's it. What you do with that power is entirely up to you. Primarily it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should!) also be automated as well.

Selenium has the support of some of the largest browser vendors who have taken (or are taking) steps to make Selenium a native part of their browser. It is also the core technology in countless other browser automation tools, APIs and frameworks.


2 Selenium Web Driver Maven pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.wilson</groupId>
	<artifactId>selenium</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>selenium</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>2.21.0</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
	</dependencies>
</project>


3 give a sample for test upload file, below is the simplest jsp for springmvc file upload
<html>
<head>
<title>file upload test</title>
</head>
<body>

	<form method="post" action="uploader" enctype="multipart/form-data">
		<input type="text" name="name" value="file"/> <input type="file" name="file" />
		<input id="submit" type="submit" />
	</form>
</body>
</html>


4 Junit Tester
package com.wilson.selenium;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class FileUploadTest {
	protected static String baseUrl = "http://localhost";
	protected static Selenium2 s;

	@BeforeClass
	public static void beforeClass() throws Exception {
		createSeleniumOnce();
	}

	/**
	 * 创建Selenium.
	 */
	protected static void createSeleniumOnce() throws Exception {

		if (s == null) {
			// 根据配置创建Selenium driver.
			// WebDriver driver = WebDriverFactory.createDriver("ie");
			DesiredCapabilities ieCapabilities = DesiredCapabilities
					.internetExplorer();
			ieCapabilities
					.setCapability(
							InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
							true);
			WebDriver driver = new InternetExplorerDriver(ieCapabilities);
			s = new Selenium2(driver, baseUrl);
			
//			WebDriver driver = new FirefoxDriver();
//			s = new Selenium2(driver, baseUrl);
			
			
			s.setStopAtShutdown();
		}
	}

	@Test
	public void test() {
		s.open("/upload.jsp");
		s.type(By.name("name"), "11");
//		s.type(By.name("file"), "D:/wubi.exe");
		s.findElement(By.name("file")).sendKeys("D:\\21.xls");
		s.click(By.id("submit"));
	}

}



5 Selenium helper class
/**
 * Copyright (c) 2005-2012 springside.org.cn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package com.wilson.selenium;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;

/**
 * 融合了Selenium 1.0 API与Selenium 2.0的By选择器的API.
 *
 * @author calvin
 */
public class Selenium2 {

	public static final int DEFAULT_WAIT_TIME = 20;
	private WebDriver driver;
	private String baseUrl;

	public Selenium2(WebDriver driver, String baseUrl) {
		this.driver = driver;
		this.baseUrl = baseUrl;
		setTimeout(DEFAULT_WAIT_TIME);
	}

	/**
	 * 不设置baseUrl的构造函数, 调用open函数时必须使用绝对路径. 
	 */
	public Selenium2(WebDriver driver) {
		this(driver, "");
	}

	/**
	 * 注册在JVM退出时关闭Selenium的钩子。
	 */
	public void setStopAtShutdown() {
		Runtime.getRuntime().addShutdownHook(new Thread("Selenium Quit Hook") {
			@Override
			public void run() {
				quit();
			}
		});
	}

	// Driver 函數  //
	/**
	 * 打开地址,如果url为相对地址, 自动添加baseUrl.
	 */
	public void open(String url) {
		final String urlToOpen = url.indexOf("://") == -1 ? baseUrl + (!url.startsWith("/") ? "/" : "") + url : url;
		driver.get(urlToOpen);
	}

	/**
	 * 获取当前页面.
	 */
	public String getLocation() {
		return driver.getCurrentUrl();
	}

	/**
	 * 回退历史页面。
	 */
	public void back() {
		driver.navigate().back();
	}

	/**
	 * 刷新页面。
	 */
	public void refresh() {
		driver.navigate().refresh();
	}

	/**
	 * 获取页面标题.
	 */
	public String getTitle() {
		return driver.getTitle();
	}

	/**
	 * 退出Selenium.
	 */
	public void quit() {
		try {
			driver.quit();
		} catch (Exception e) {
			System.err.println("Error happen while quit selenium :" + e.getMessage());
		}
	}

	/**
	 * 设置如果查找不到Element时的默认最大等待时间。
	 */
	public void setTimeout(int seconds) {
		driver.manage().timeouts().implicitlyWait(seconds, TimeUnit.SECONDS);
	}

	/**
	 * 获取WebDriver实例, 调用未封装的函数.
	 */
	public WebDriver getDriver() {
		return driver;
	}

	//Element 函數//

	/**
	 * 查找Element.
	 */
	public WebElement findElement(By by) {
		return driver.findElement(by);
	}

	/**
	 * 查找所有符合条件的Element.
	 */
	public List<WebElement> findElements(By by) {
		return driver.findElements(by);
	}

	/**
	 * 判断页面内是否存在Element.
	 */
	public boolean isElementPresent(By by) {
		try {
			driver.findElement(by);
			return true;
		} catch (NoSuchElementException e) {
			return false;
		}
	}

	/**
	 * 判断Element是否可见.
	 */
	public boolean isVisible(By by) {
		return driver.findElement(by).isDisplayed();
	}

	/**
	 * 在Element中输入文本内容.
	 */
	public void type(By by, String text) {
		WebElement element = driver.findElement(by);
		element.clear();
		element.sendKeys(text);
	}

	/**
	 * 点击Element.
	 */
	public void click(By by) {
		driver.findElement(by).click();
	}

	/**
	 * 选中Element.
	 */
	public void check(By by) {
		WebElement element = driver.findElement(by);
		check(element);
	}

	/**
	 * 选中Element.
	 */
	public void check(WebElement element) {
		if (!element.isSelected()) {
			element.click();
		}
	}

	/**
	 * 取消Element的选中.
	 */
	public void uncheck(By by) {
		WebElement element = driver.findElement(by);
		uncheck(element);
	}

	/**
	 * 取消Element的选中.
	 */
	public void uncheck(WebElement element) {
		if (element.isSelected()) {
			element.click();
		}
	}

	/**
	 * 判断Element有否被选中.
	 */
	public boolean isChecked(By by) {
		WebElement element = driver.findElement(by);
		return isChecked(element);
	}

	/**
	 * 判断Element有否被选中.
	 */
	public boolean isChecked(WebElement element) {
		return element.isSelected();
	}

	/**
	 * 返回Select Element,可搭配多种后续的Select操作.
	 * eg. s.getSelect(by).selectByValue(value);
	 */
	public Select getSelect(By by) {
		return new Select(driver.findElement(by));
	}

	/**
	 * 获取Element的文本.
	 */
	public String getText(By by) {
		return driver.findElement(by).getText();
	}

	/**
	 * 获取Input框的value.
	 */
	public String getValue(By by) {
		return getValue(driver.findElement(by));
	}

	/**
	 * 获取Input框的value.
	 */
	public String getValue(WebElement element) {
		return element.getAttribute("value");
	}

	// WaitFor 函數 //
	/**
	 * 等待Element的内容可见, timeout单位为秒.
	 */
	public void waitForVisible(By by, int timeout) {
		waitForCondition(ExpectedConditions.visibilityOfElementLocated(by), timeout);
	}

	/**
	 * 等待Element的内容为text, timeout单位为秒.
	 */
	public void waitForTextPresent(By by, String text, int timeout) {
		waitForCondition(ExpectedConditions.textToBePresentInElement(by, text), timeout);
	}

	/**
	 * 等待Element的value值为value, timeout单位为秒.
	 */
	public void waitForValuePresent(By by, String value, int timeout) {
		waitForCondition(ExpectedConditions.textToBePresentInElementValue(by, value), timeout);
	}

	/**
	 * 等待其他Conditions, timeout单位为秒.
	 * 
	 * @see #waitForTextPresent(By, String, int)
	 * @see ExpectedConditions
	 */
	public void waitForCondition(ExpectedCondition conditon, int timeout) {
		(new WebDriverWait(driver, timeout)).until(conditon);
	}

	// Selenium1.0 函數 //

	/**
	 * 简单判断页面内是否存在文本内容.
	 */
	public boolean isTextPresent(String text) {
		String bodyText = driver.findElement(By.tagName("body")).getText();
		return bodyText.contains(text);
	}

	/**
	 * 取得单元格的内容, 序列从0开始, Selnium1.0的常用函数.
	 */
	public String getTable(WebElement table, int rowIndex, int columnIndex) {
		return table.findElement(By.xpath("//tr[" + (rowIndex + 1) + "]//td[" + (columnIndex + 1) + "]")).getText();
	}

	/**
	 * 取得单元格的内容, 序列从0开始, Selnium1.0的常用函数.
	 */
	public String getTable(By by, int rowIndex, int columnIndex) {
		return getTable(driver.findElement(by), rowIndex, columnIndex);
	}

}


5 attached test project(selenium) and springmvc project(repository)
分享到:
评论

相关推荐

    selenium2初学者快速入门

    ### Selenium2初学者快速入门详解 #### 一、引言 随着软件开发的快速发展和规模的不断增大,传统的手动测试方式越来越难以满足高效且频繁的测试需求。为了解决这一问题,自动化测试成为了软件测试领域的重要发展...

    Appium + Selenium 2 入门

    ### Appium + Selenium 2 入门:详细解析 #### 一、Selenium 2 全面解析 **Selenium 2** 是一种强大的工具,它整合了 **Selenium 1** 和 **WebDriver** 的最佳特性,使得在多个浏览器中进行 Web 应用程序的端到端...

    selenium新手入门必看

    ### Selenium新手入门必看知识点详解 #### 一、Selenium简介与重要性 Selenium 是一个强大的自动化测试工具集,广泛应用于Web应用的功能性测试。它支持多种浏览器(如Chrome、Firefox等)以及多种编程语言(包括...

    selenium快速入门及常用api

    Selenium是一款强大的Web自动化测试工具,它允许开发者模拟用户行为,对网页进行各种操作,如点击、输入、导航等,从而进行功能测试和性能测试。本文将深入介绍Selenium的快速入门以及常用的API。 ### 一、Selenium...

    selenium自动化测试入门

    ### Selenium自动化测试入门知识点 #### 一、Selenium介绍 Selenium是一个强大的工具集,用于自动化Web应用测试。它的核心特点在于能够模拟真实的用户行为在Web浏览器中执行测试脚本,这种测试方式与用户手动操作...

    java和selenium自动化爬取超简单实例入门参考

    本文将详细介绍如何使用 Java 和 Selenium 进行自动化爬虫的入门实践,帮助初学者快速掌握这一技能。 Selenium 是一个用于 Web 应用程序测试的开源工具,但它同样适用于网页爬虫的开发。它支持多种编程语言,包括 ...

    selenium2初学者快速入门 java版

    ### Selenium2初学者快速入门(Java版):详解与实战指南 #### 一、引言 随着软件开发行业的快速发展,自动化测试已经成为确保软件质量的重要手段之一。传统的手工测试方法不仅耗时费力,而且难以应对日益复杂的...

    selenium入门问题和解决

    Selenium 是一个强大的开源自动化测试工具,广泛应用于Web应用程序的测试。它支持多种编程语言,如Java、Python、C#等,允许开发者编写脚本来模拟用户对网页的交互行为。这篇教程将针对Selenium初学者可能会遇到的...

    selenium2初学者快速入门(Java).docx

    Selenium 是一个强大的开源自动化测试框架,主要用于 web 应用程序的功能测试。它以其高效执行、广泛的浏览器兼容性以及易集成的特点受到了开发者的热烈欢迎。Selenium2,也被称为 WebDriver,是 Selenium 的一个...

    自己做的selenium基础的课件

    1. **安装与配置**: 首先需要下载Selenium Server,然后在服务器端启动该服务,接着在客户端安装对应的驱动程序(如FirefoxDriver、ChromeDriver等)。 2. **编程接口**: 使用Selenium RC,我们需要学习其提供的API...

    Selenium-Python中文手册

    Selenium是一个强大的Web自动化测试工具,Python版本的Selenium绑定提供了简单易用的API,使得用户能够轻松地编写功能性和校验测试。这份手册主要针对Selenium 2 WebDriver的API,不涵盖Selenium 1或Selenium RC的...

    Selenium私房菜(新手入门教程).zip_selenium

    **Selenium私房菜——新手入门教程** Selenium是一款强大的自动化测试工具,广泛应用于Web应用程序的测试。它支持多种编程语言,如Java、Python、C#等,且能与多种浏览器无缝对接,包括Chrome、Firefox、IE等。本...

    Selenium深入浅出1.0

    Selenium作为一款强大的Web自动化测试工具,不仅提供了易于使用的IDE来快速入门,还支持高级API供开发者创建定制化的测试解决方案。无论是初学者还是有经验的测试工程师,都能从中受益。通过掌握Selenium的各种特性...

    Selenium使用文档压缩包

    这个压缩包包含的资源是针对Selenium使用者的入门和进阶指南,帮助读者更好地理解和运用Selenium。 《Selenium.1.0.Testing.Tools.Beginners.Guide.Nov.2010.pdf》可能涵盖了Selenium 1.0的基础知识,包括Selenium ...

    selenium+python自动化测试代码

    本篇文章将深入探讨如何使用Selenium与Python进行Web自动化测试,以及基础脚本的编写。 **Selenium IDE** Selenium IDE(集成开发环境)是Selenium家族中的一个轻量级工具,它是一个基于Firefox的插件,提供了一个...

    selenium-python.pdf

    #### 二、入门教程 **2.1 简单使用** 在安装完 Selenium 后,可以通过以下示例代码启动 WebDriver,并打开一个网页: ```python from selenium import webdriver driver = webdriver.Chrome() # 使用 ...

Global site tag (gtag.js) - Google Analytics