`
baorui945
  • 浏览: 7645 次
社区版块
存档分类
最新评论

Selenium实例 Demo

    博客分类:
  • tips
 
阅读更多
结构:
1 定义Page类
2 定义DriverManager类
3 定义TestCase类
4 定义ItemManager类

其中:
1 LoginPage类继承Page类

步骤如下:
1 创建页面对象,并根据操作步骤,完成代码
2 根据操作,记录操作结果
3 对比操作结果和预期结果

使用框架:
1 junit4
2 testNG

import org.openqa.selenium.support.PageFactory;

public class Page {

	public Page(){
		PageFactory.initElements(DriverManager.getDriver(), this);
	}
}

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

public class LoginPage extends Page {
	private static final String URL = "http://localhost:52452/icloudboss/";

	// WebDriver driver;
	/**
	 * 只有homepage之类的起始页才必要有这个init方法用来打开URL。 return this 表示执行完毕之后页面仍旧在本页。
	 * 如果留在本页,并有页面刷新,就要return new JDHomepage 如果没有页面刷新等页面改变,就return this
	 * 如果跳转到其他页面,就return new xxxPage 这样写的好处,是每个方法的return语句上明确了页面跳转的预期结果 Only the
	 */
	// 初始化
	public LoginPage init() {
		DriverManager.getDriver().get(URL);
		return this;
	}

	// 退出
	public void quit() {
		DriverManager.quitDriver();
	}

	//获取输入框元素,并 输入字符
	public void inputText(String id, String value) {
		WebElement element = DriverManager.getDriver().findElement(By.id(id));
		element.sendKeys(value);
	}

	public void inputTextYaml(String key, ItemManager item, String value) {
		WebElement element = item.getElement(key, DriverManager.getDriver());
		element.sendKeys(value);
	}

	//获取按钮元素,并点击按钮
	public void clickButtonWithItem(String buttonID, ItemManager item) {
		// WebElement element = DriverManager.getDriver().findElement(
		// By.id(buttonID));
		WebElement element = item.getElement(buttonID,
				DriverManager.getDriver());
		element.click();
	}

	public void clickButton(String buttonID) {
		WebElement element = DriverManager.getDriver().findElement(
				By.id(buttonID));

		element.click();
	}

	// 获取页面字符串
	public String getTextWithItem(String ID, ItemManager item) {
		// WebElement element = DriverManager.getDriver().findElement(
		// By.id(ID));
		WebElement element = item.getElement(ID, DriverManager.getDriver());
		return element.getText();
	}

	public String getText(String ID) {
		WebElement element = DriverManager.getDriver().findElement(By.id(ID));
		return element.getText();
	}
	// 获取页面字符串
	public String findSysName(String className) {
		return DriverManager.getDriver().findElement(By.className(className))
				.getText();
	}
}


import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;

public class DriverManager {
	public static ThreadLocal<WebDriver> threadDriver = new ThreadLocal<WebDriver>();
	public static String browserType = "firefox";
	static String chromePath = "E:/Driver/chromedriver.exe";
	static String driverTpye = "webdriver.chrome.driver";

	/**
	 * 根据TestCase的要求来指定浏览器类型但不创建他 save the browser type but not create it
	 * 
	 * @param browser
	 *            :浏览器名字
	 */
	public static void setupDriver(String browser) {
		browserType = browser;
	}

	/**
	 * 关浏览器,Windows上需要在这里杀进程的步骤 quit the driver
	 */

	public static void quitDriver() {
		getDriver().quit();
		System.out.println(getDriver().toString());
		DriverManager.threadDriver.set(null);
	}

	public static WebDriver getDriver() {
		WebDriver driver = DriverManager.threadDriver.get();
		if (driver == null) {
			if (browserType == "firefox") {
				driver = new EventFiringWebDriver(new FirefoxDriver())
						.register(new LogEventListener());
				threadDriver.set(driver);
				DriverManager.getDriver().manage().timeouts()
						.implicitlyWait(3, TimeUnit.SECONDS);
			} else if (browserType == "chrome") {
				System.setProperty(driverTpye, chromePath);
				ChromeDriverService service = new ChromeDriverService.Builder()
						.usingDriverExecutable(new File(chromePath))
						.usingAnyFreePort().build();
				try {
					service.start();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();

				}
				driver = new RemoteWebDriver(service.getUrl(),
						DesiredCapabilities.chrome());
			}
		}
		System.out.println(driver.toString());
		return driver;
	}


}



import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;

import org.ho.yaml.Yaml;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class ItemManager {
	public String yamlFile;

	// 初始化yaml文件名称
	public ItemManager(String fileName) {
		yamlFile = fileName;
		this.getYamlFile();
	}
	
	public HashMap<String, HashMap<String, String>> ml;
	// 获取yaml文件内容
	@SuppressWarnings("unchecked")
	public void getYamlFile() {
		File f = new File("demo/" + yamlFile + ".yaml");
		try {
			ml = Yaml.loadType(new FileInputStream(f.getAbsolutePath()),
					HashMap.class);
			System.out.println(ml.toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	// 获取BY对象
	public By getBy(String type, String value) {
		By by = null;
		if (type.equals("id")) {
			by = By.id(value);
		}
		if (type.equals("name")) {
			by = By.name(value);
		}
		if (type.equals("xpath")) {
			by = By.xpath(value);
		}
		if (type.equals("className")) {
			by = By.className(value);
		}
		if (type.equals("linkText")) {
			by = By.linkText(value);
		}
		return by;
	}
	// 获取元素对象
	public WebElement getElement(String key, WebDriver driver) {
		String type = this.ml.get(key).get("type");
		String value = this.ml.get(key).get("value");
		return driver.findElement(this.getBy(type, value));
	}

}


import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class LoginPageTestJunit4 extends TestCase {
	LoginPage tLoginPage;
	ItemManager item;
	@Before
	public void createLoginPage(){
		
		tLoginPage = new LoginPage();
		tLoginPage.init();
		item = new ItemManager("login");
		item.getYamlFile();
		System.out.println("==================="+item.ml);
	}
	@After
	public void deleteLoginPgae(){
		tLoginPage.quit();
	}
	
	@Test
	public void loginPageCheckTest(){
		String expectedResult = "云管理平台"; 
		String ActualResult ;
		ActualResult = tLoginPage.findSysName("iWRIS_word");
		Assert.assertEquals(expectedResult, ActualResult);
	}
	@Test
	public void LoginPageLoginActionTest(){
		String expectedResult ="super@hongdian.com" ;
		String actualReslut ;
		//直接在测试代码中写入元素
//		tLoginPage.inputText("u_name", "super@hongdian.com");
//		tLoginPage.inputText("u_pwd", "1");
		//使用yaml文件管理页面元素
		tLoginPage.inputTextYaml("username_input", item, "super@hongdian.com");
		tLoginPage.inputTextYaml("pwd_input", item, "1");
		tLoginPage.clickButtonWithItem("button_ID",item);
		actualReslut = tLoginPage.getTextWithItem("text_id",item);
		Assert.assertEquals(expectedResult, actualReslut);
	}
	
}

import java.lang.reflect.Method;

import org.testng.AssertJUnit;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class LoginPageTestNG {
	LoginPage tLoginPage;
	ItemManager item;

	@BeforeClass
	public void createLoginPage() {
		tLoginPage = new LoginPage();
		tLoginPage.init();
		item = new ItemManager("login");
		item.getYamlFile();
	}

	@AfterClass
	public void deleteLoginPgae() {
		 tLoginPage.quit();
	}

	// 使用@Parameters方式参数化读取XML
	@Test
	@Parameters({ "key1", "key2", "userName", "pwd", "expectedResult",
			"buttonID", "id" })
	public void LoginPageLoginActionTest(String key1, String key2,
			String userName, String pwd, String expectedResult1,
			String buttonID, String id) {
		String expectedResult = expectedResult1;
		String actualReslut;
		System.out.println(buttonID + id);
		tLoginPage.inputTextYaml(key1, item, userName);
		tLoginPage.inputTextYaml(key2, item, pwd);
		tLoginPage.clickButtonWithItem(buttonID, item);
		actualReslut = tLoginPage.getTextWithItem(id, item);
		AssertJUnit.assertEquals(expectedResult, actualReslut);
	}

	// 使用@DataProvider方式参数化
	@DataProvider(name = "LoginTest")
	public Object[][] createUser(Method m) {
		System.out.println(m.getName());
		return new Object[][] { { "u_name", "u_pwd", "xxxx", "xxxx",
				"xxxxx", "imageDiv", "uName" } };
	}

	@Test(dataProvider = "LoginTest")
	public void LoginPageLoginActionTest2(String key1, String key2,
			String userName, String pwd, String expectedResult1,
			String buttonID, String id) {
		String expectedResult = expectedResult1;
		String actualReslut;
		System.out.println("参数 : " + key1 + key2 + userName + pwd
				+ expectedResult1 + buttonID + id);
		tLoginPage.inputText(key1, userName);
		tLoginPage.inputText(key2, pwd);
		tLoginPage.clickButton(buttonID);
		actualReslut = tLoginPage.getText(id);
		AssertJUnit.assertEquals(expectedResult, actualReslut);
	}

}

分享到:
评论

相关推荐

    selenium自动化测试 java实例

    **Selenium 自动化测试与 Java 实例** Selenium 是一款强大的开源自动化测试框架,用于模拟用户在浏览器上的各种操作,以验证Web应用程序的功能和行为。它支持多种编程语言,其中包括Java,使得开发者和测试工程师...

    selenium-demo

    **Selenium-Demo详解** Selenium 是一个强大的Web应用程序测试框架,它允许开发者模拟用户行为,进行自动化浏览器操作。在本示例"Selenium-Demo"中,我们将深入探讨如何使用Selenium来自动化执行浏览器操作,特别是...

    selenium+JAVA+chrome自动化测试demo

    【标题】"selenium+JAVA+chrome自动化测试demo"揭示了这个项目是关于使用Selenium WebDriver结合Java语言来实现Chrome浏览器的自动化测试。Selenium是一个强大的开源自动化测试框架,允许开发者编写可运行在多种...

    python+selenium+unittest测试demo

    1、使用HTMLTestRunner生成测试报告; 2、添加测试套件,运行一个文件执行所有测试用例; 3、只在测试执行前打开浏览器,所有用例执行结束后关闭浏览器。(解决反复启动/关闭driver导致的执行效率问题) ...

    C#操作Selenium自动化测试,采集数据实例源码。

    在提供的压缩包`SeleniumDemo`中,你将找到完整的C#源码示例,这些示例可能包含如何定位网页元素、执行点击操作、处理页面跳转、填充表单和收集数据等内容。代码中应有详细的注释,帮助你理解每个步骤的作用。 总之...

    Selenium_Demo

    总结来说,"Selenium_Demo"是一个展示如何使用Java和Selenium进行Web自动化测试的实例。通过这个项目,我们可以学习到如何初始化WebDriver,操作网页元素,处理等待,以及使用断言进行结果验证。掌握这些技能,将有...

    Demo_Robot=Demo_Selenium=自动化测试例子

    这段代码首先设置了ChromeDriver的路径,然后启动一个新的Chrome浏览器实例,导航到www.example.com,找到搜索框并输入“Selenium Test”,最后提交搜索并关闭浏览器。 Selenium还支持断言和异常处理,可以用于验证...

    python+selenium+unittest自动化测试demo

    综上所述,这个"python+selenium+unittest自动化测试demo"提供了一个全面的测试解决方案,涵盖了从编写测试用例、执行测试、生成报告到通知结果的全过程。它对于学习自动化测试和提升测试效率具有很高的参考价值。

    java使用Selenium模拟登陆58(验证码登陆&密码登陆)若快平台识别文字点击验证码Demo

    - 创建WebDriver实例,根据实际需求选择合适的浏览器驱动。 - 使用`get()`方法打开目标网页。 - 使用`findElement()`定位到用户名和密码输入框,使用`sendKeys()`填充信息。 - 对于验证码,先定位到验证码图片...

    Selenium-3.12-自动化测试例子

    在"Demo_Selenium-3.12"的案例中,开发者可能已经提供了一些预设的测试场景,我们可以学习和参考这些例子,了解如何编写有效的自动化测试脚本,以及如何处理不同的网页元素和交互。 总结来说,Selenium 3.12作为一...

    测试自动化脚本 selenium po模型

    4. **编写测试脚本**:在测试脚本中,实例化相应的PO对象,通过调用其方法执行测试步骤。 此外,Selenium还提供了丰富的API,用于等待页面加载、处理异步请求等,这在使用PO模型时同样重要。例如,可以使用...

    Python中Selenium模拟JQuery滑动解锁实例.pdf

    driver.get("http://www.helloweba.com/demo/2017/unlock/") ``` 这里的关键在于找到滑动解锁元素。在示例中,滑块元素被标记为`slide-to-unlock-handle`,我们可以通过类名找到它: ```python dragger = driver....

    selenium+python配置详细配置流程和DEMO代码

    ### Selenium+Python 配置详细配置流程和DEMO代码 #### 环境部署 在开始之前,确保您的计算机上已经安装了Python环境,并且具备基本的Python编程基础。接下来,我们将详细介绍如何通过Python来配置Selenium环境。 ...

    selenium资料

    压缩包中的 "Demo" 文件可能是包含 Selenium 示例代码或项目实例,通过分析和学习这些代码,你可以更深入地了解如何使用 Selenium 进行实际的网页自动化测试。实际操作中,可以根据具体的业务需求,编写符合逻辑的...

    Selenium2.0之WebDriver学习总结(1)

    package demo; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium....

    Selenium关键字驱动测试框架Demo(Java版).docx

    5. **FirefoxDriver**: 这是Selenium WebDriver的一个实例,用于控制Firefox浏览器。WebDriver接口允许直接与浏览器进行通信,执行如导航、输入和点击等操作。 6. **By**: Selenium中的By类用于定位网页元素。在...

    SeleniumDemo

    **SeleniumDemo** 是一个基于Python的项目,它利用了Selenium库来实现自动化Web浏览器交互。Selenium是一个强大的开源工具,广泛用于网页自动化测试,尤其是网页应用的功能性测试。这个项目可能是为了演示如何使用...

    selenium-nightwatch-demo:使用Selenium和Nightwatch自动化DuckDuckGo搜索的演示

    cd selenium-nightwatch-demo && npm install 运行测试 要运行测试,只需运行以下命令。 它从package.json文件获取test脚本并运行该命令。 Chrome将启动并运行duck-duck-go.js测试。 npm run test

    [转载]Selenium2.0之WebDriver学习总结(1).docx

    package demo; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium....

Global site tag (gtag.js) - Google Analytics