`
镜花水月EYE
  • 浏览: 11265 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于Selenium测试的相关笔记

 
阅读更多
单位里需要自动化测试,于是就抽空看了下selenium相关的东西。也是第一次接触这些东西。就记录一些个人感觉重要的内容,以免自己今后忘记。
官网上的资料并不多,主要是分成了Selenium WebDriver和老版本的Selenium RC。
1.关于locator,
效率最高的就是通过id的方式锁定web element。
但是公司用了gwt-ext,所有的element都是js自动生成的。每次刷新id都会不同。
所以这个locator我纠结了很久,最后在某人的笔记中发现可以用xpath的text()方法进行锁定。于是问题就迎刃而解。
这里就记录一些比较有用的xpath表达式。
1. 根据文字内容来确定结点,去除文字中的空格。
//td[@jsxtype="text"]/div[contains(normalize-space(text()), 'app3')]

2. 查找父级元素
//div[@class="abc"]/..

3. focus, mouseOver, click连用,某些时候,点击事件无效的时候可以试试

focus | //span[@label="applications"] |
mouseOver | //span[@label="applications"] |
click | //span[@label="applications"] |

4. Selenium 去前后空格后验证 (正则表达式)
//a[contains(text(),"name")]/following::td[1][normalize-space(text())='Text Box']

5. Selenium 用带正则表达式的 replace 来 替换 字符
store | https://xx.com//g.php?t=xxx | url
storeEval | “${url}”.replace(/&/g,”*”) | urlResult
echo | ${urlResult} |

6. waitForXXX,不好使的时候,就先Pause暂停一段时间。

7. type 不好使的时候,试试命令组合 focus, type, fireEvent(blur)

xpath的查找插件Firefinder。

虽然xpath很好用,但是并不是selenium在每个浏览器中都支持这个。
selenium 2.0 webdriver中,firefox的支持还行,ie和htmlunit多不敢恭维,chrome公司里不能用。

selenum 1.0 RC,对ie也支持了xpath,其他浏览器为实践过。

下面贴一个webdriver remote的例子。
package selenium.usecasemap;

import static org.junit.Assert.fail;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import junit.framework.Assert;

import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


/**
 * 
 * 
 */
public class TestUseCaseFundMapping
{
    static Logger LOGGER = Logger.getLogger(TestUseCaseFundMapping.class);
    private static WebDriver driver;
    private String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();
    private JdbcTemplate jdbcTemplate = null;
    private JdbcConnectionResource connectionResource = null;
    private String queryFirstly = "select 马赛克;
    private String initSql9 = "insert 马赛克";
    private String initSql8 = "insert into 马赛克";
    private String deleteUsecaseSql = "delete 马赛克";
    private String deleteFundMap = "delete 马赛克";

    public void loadConfig()
    {
	System.setProperty("FAW.xxxxxx.bootstrap.config.source", "xml");
	FrameworkContainer.create("xx", "selenium_test");
	connectionResource = ContextManager.getObject("connectionResource", JdbcConnectionResource.class);
	jdbcTemplate = new JdbcTemplate(connectionResource);
    }

    @Before
    public void setUp() throws Exception
    {
	remoteDriverServer();

	baseUrl = "http://马赛克:9980/xxxxweb";
	loadConfig();

    }

    private void remoteDriverServer() throws MalformedURLException
    {
	// DesiredCapabilities capabilities = new DesiredCapabilities();
	// capabilities.setBrowserName(BrowserName.FF.toString());
	// capabilities.setVersion(version)
	// CommandExecutor executor = new HttpCommandExecutor(new
	// URL("127.0.0.1/wd/hub"));
	driver = new RemoteWebDriver(new URL("127.0.0.1/wd/hub"), DesiredCapabilities.firefox());
	// DRIVER = NEW FIREFOXDRIVER();
    }

    /**
     * test add new one
     * 
     * @throws Exception
     */
    @Test
    public void testUsecaseMapping() throws Exception
    {

	finishWork();

	LOGGER.info("finish work done");

	initWork();

	LOGGER.info("init work done");

	login();

	LOGGER.info("login work done");

	openTab();

	LOGGER.info("openTab work done");

	addNew();

	LOGGER.info("addNew work done");

	varifyAddNew();

	LOGGER.info("varifyAddNew work done");

	editPilot();

	LOGGER.info("edit work done");

	varifyEdit();

	LOGGER.info("varify work done");

	testClone();

	LOGGER.info("clone work done");

	varifyClone();

	LOGGER.info("varyfy work done");

	finishWork();

	LOGGER.info("finish work done");
    }

    private void varifyClone()
    {
	driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
	By by = By
		.xpath("//tr/td/div[contains(text(),'UI TEST8')]/../../td/div[contains(text(),'IBWW')]/../../td/div[contains(text(),'On')]");

	WebElement el2 = varifyGetElementByLocator(by);
	Assert.assertNotNull(el2);
    }

    private void testClone() throws InterruptedException
    {
	getElementByLocator(By.xpath("//tr[td[div[contains(text(),'UI TEST9')]] and td[div[contains(text(),'IBWW')]]]/td[1]"))
		.click();
	getElementByLocator(By.xpath("//button[contains(text(),'Clone')]")).click();
	Thread.sleep(1000);
	getElementByLocator(By.xpath("//input[contains(@id,'FUND')]/../input[2]")).sendKeys("ALL");
	driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
	getElementByLocator(By.xpath("//div[contains(text(),'ALL') and contains(@class,'x-combo-list-item')]")).click();
	Thread.sleep(1000);
	getElementByLocator(By.xpath("//div[contains(text(),'UI TEST8')]")).click();

	getElementByLocator(By.xpath("//button[text()='>']")).click();

	getElementByLocator(By.xpath("//button[text()='Save']")).click();

	(new WebDriverWait(driver, 10)).until((ExpectedConditions.presenceOfElementLocated(By.xpath("//button[text()='Yes']"))));

	getElementByLocator(By.xpath("//button[text()='Yes']")).click();
    }

    private void varifyEdit() throws InterruptedException
    {
	driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
	By by = By
		.xpath("//tr/td/div[contains(text(),'UI TEST9')]/../../td/div[contains(text(),'IBWW')]/../../td/div[contains(text(),'On')]");
	WebElement el2 = varifyGetElementByLocator(by);
	Assert.assertNotNull(el2);
    }

    private void editPilot() throws InterruptedException
    {
	getElementByLocator(By.xpath("//tr[td[div[contains(text(),'UI TEST9')]] and td[div[contains(text(),'IBWW')]]]/td[1]"))
		.click();
	getElementByLocator(By.xpath("//button[contains(text(),'Edit')]")).click();
	Thread.sleep(3000);
	getElementByLocator(By.xpath("//input[@id='USE_CASE_MODE']/../img")).click();
	driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
	getElementByLocator(By.xpath("//div[text()='On' and contains(@class,'x-combo-list-item')]")).click();
	getElementByLocator(By.xpath("//button[text()='Save']")).click();

	(new WebDriverWait(driver, 10)).until((ExpectedConditions.presenceOfElementLocated(By.xpath("//button[text()='Yes']"))));

	getElementByLocator(By.xpath("//button[text()='Yes']")).click();
    }

    private void varifyAddNew() throws InterruptedException
    {
	driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
	By by = By.xpath("//tr/td/div[contains(text(),'UI TEST9')]/../../td/div[contains(text(),'IBWW')]");
	WebElement el2 = varifyGetElementByLocator(by);
	Assert.assertNotNull(el2);
    }

    private void addNew() throws InterruptedException
    {
	(new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//button[text()='Add New']")));

	getElementByLocator(By.xpath("//button[text()='Add New']")).click();

	(new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By
		.xpath("//input[contains(@id,'CLIENT')]/../input[2]")));

	getElementByLocator(By.xpath("//input[contains(@id,'CLIENT')]/../input[2]")).sendKeys("IBW");

	// select Client IBWW
	(new WebDriverWait(driver, 10)).until((ExpectedConditions.presenceOfElementLocated(By
		.xpath("//div[contains(text(),'IBWW')][contains(@class,'x-combo-list-item')]"))));

	getElementByLocator(By.xpath("//div[contains(text(),'IBWW')][contains(@class,'x-combo-list-item')]")).click();

	Thread.sleep(1000);

	getElementByLocator(By.xpath("//div[contains(text(),'UI TEST9')]")).click();

	getElementByLocator(By.xpath("//button[text()='>']")).click();

	getElementByLocator(By.xpath("//button[text()='Save']")).click();

	(new WebDriverWait(driver, 10)).until((ExpectedConditions.presenceOfElementLocated(By.xpath("//button[text()='Yes']"))));

	getElementByLocator(By.xpath("//button[text()='Yes']")).click();
    }

    private void openTab() throws InterruptedException
    {
	(new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By
		.xpath("//button[text()='Reference Data Maintenance']")));
	getElementByLocator(By.xpath("//button[text()='Reference Data Maintenance']")).click();
	(new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By
		.xpath("//span[contains(text(),'Use Case Fund Mapping')]")));

	getElementByLocator(By.xpath("//span[contains(text(),'Use Case Fund Mapping')]")).click();

	Thread.sleep(2000);
    }

    private void login() throws InterruptedException
    {
	driver.get(baseUrl + "/html/com.ssc.gce.gceui.home.GCEWorkspace/GCEWorkspace.html");
	(new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[string(@id)='user']")));
	// login
	getElementByLocator(By.xpath("//input[string(@id)='user']")).clear();
	getElementByLocator(By.xpath("//input[string(@id)='user']")).sendKeys("马赛克");
	getElementByLocator(By.xpath("//input[string(@id)='password']")).clear();
	getElementByLocator(By.xpath("//input[string(@id)='password']")).sendKeys("马赛克");
	getElementByLocator(By.xpath("//button[text()='Login']")).click();
    }

    private void initWork()
    {
	Long back = jdbcTemplate.withSql(queryFirstly).queryForLong();
	if (back == null)
	{
	    jdbcTemplate.withSql(initSql9).update();
	    jdbcTemplate.withSql(initSql8).update();
	}
	LOGGER.info("Init Done!");
    }

    private void finishWork()
    {
	jdbcTemplate.withSql(deleteFundMap).update();
	jdbcTemplate.withSql(deleteUsecaseSql).update();
    }

    @After
    public void tearDown() throws Exception
    {

	driver.quit();
	String verificationErrorString = verificationErrors.toString();
	if (!"".equals(verificationErrorString))
	{
	    fail(verificationErrorString);
	}
    }

     public static WebElement varifyGetElementByLocator( By locator ) {
     driver.manage().timeouts().implicitlyWait( 2, TimeUnit.SECONDS );
     WebElement we = null;
     boolean unfound = true;
     int tries = 0;
     while ( unfound && tries < 10 ) {
     tries += 1;
     try {
     we = driver.findElement( locator );
     unfound = false; // FOUND IT
     } catch ( StaleElementReferenceException ser ) {
     unfound = true;
     LOGGER.debug(ser);
     LOGGER.debug("will try again!");
     } catch ( NoSuchElementException nse ) {
     LOGGER.debug(nse);
     LOGGER.debug("will try again!");
     unfound = true;
     } catch ( Exception e ) {
     LOGGER.error("Unknown error."+e);
     }
     }
     driver.manage().timeouts().implicitlyWait( 1, TimeUnit.SECONDS );
     return we;
     }

    public static WebElement getElementByLocator(By locator)
    {
	WebElement we = null;
	we = driver.findElement(locator);
	return we;
    }
    
    
    @Test
    public void testHome() throws Exception
    {
	login();

	LOGGER.info("login work done");
	
	WebElement we= varifyGetElementByLocator(By.xpath("//td[div[text()='In Error']]"));
	Assert.assertNotNull(we);
	LOGGER.info("TEST HOME FINISHED!");
	
	
    }
}


selenium RC demo的代码还没有全部完成
就先放一个架子上来吧
public class TestXpathBySeleniumRC
{
    Selenium selenium = null;
    @Before
    public void setup(){
	selenium = new DefaultSelenium("127.0.0.1", 4444, "*iexplore ", "https://马赛克/home.jsp");
	selenium.start();
    }
    
    @Test
    public void testLogin(){

	selenium.open("/");
	selenium.type("//input[@name='username']","马赛克");
	selenium.type("//input[@name='PASSWORD']", "马赛克");
	selenium.click("//input[@value='Submit']");
	
    }
    
    @After
    public void tearDown(){
	selenium.close();
	selenium.stop();
    }
}


关于selenium sever。
下载了jar包直接打命令就可以起了。
java -jar yourjarpath/jarName.jar
分享到:
评论

相关推荐

    Selenium WebDriver的笔记整理

    1. **创建Java项目**:首先,创建一个新的Java项目,并导入Selenium相关的JAR包,包括selenium-java和selenium-server-standalone。 2. **引入依赖**:将所有必要的库文件添加到项目的Referenced Libraries中。 3. *...

    自动化测试:Selenium webdriver学习笔记C#版

    自动化测试:Selenium webdriver学习笔记 C#版 在本篇笔记中,我们将讨论 Selenium webdriver 的自动化测试中的对象定位方法。对象定位是自动化测试中非常重要的一步骤,它决定了我们的测试脚本是否能够正确地找到...

    Selenium java 学习笔记

    #### 二、编写Selenium测试脚本 - **导入必需类库**:在编写测试脚本前,需要导入Selenium提供的API,如`com.thoughtworks.selenium.Selenium`以及JUnit的测试框架类。 - **示例:测试Google搜索** - **初始化...

    selenium笔记

    Selenium 是一个强大的开源自动化测试框架,广泛应用于Web应用程序的测试。相较于商业支持的QTP(QuickTest Professional),Selenium 凭借其开源、稳定性和易用性赢得了广大测试人员的喜爱。接下来,我们将深入探讨...

    Selenium python之学习笔记

    接下来,笔记展示了如何导入selenium库中的webdriver模块,这是Selenium自动化测试的基础。 示例代码中演示了如何创建一个新的Firefox驱动实例,并最大化窗口。之后使用driver.get方法访问了百度的首页,并利用find...

    selenium自动化笔记

    本笔记主要涵盖了Selenium自动化测试的相关知识点,包括Pycharm设置、pytest单文件调试、Unittests多文件调试、代码编辑快捷键、搜索/替换快捷键、代码运行快捷键、代码调试快捷键、应用搜索快捷键、代码重构快捷键...

    selenium2学习笔记(原创)

    1.1 **Selenium IDE**: Selenium IDE是一个集成开发环境,专门用于构建Selenium测试用例。作为一个Firefox插件,它非常易于使用,并且包含一个上下文菜单,允许用户选择浏览器当前页面上的UI元素,然后从预定义参数...

    selenium自动化测试笔记

    【Selenium 自动化测试】 Selenium 是一个强大的开源 Web UI 自动化测试工具,它支持多种编程语言,如 Java、Python、C#、Ruby 和 Perl,使得开发者可以根据自己的喜好选择合适的语言进行测试脚本编写。Selenium 的...

    Selenium WebDriver 学习笔记

    ### Selenium WebDriver 学习笔记知识点详解 #### 一、元素定位 Selenium WebDriver 提供了丰富的API用于元素定位,常见的定位策略包括: - **ID**:`driver.findElement(By.id("elementId"))` - **Name**:`driver...

    selenium Python 学习笔记

    Selenium是一个用于Web应用程序测试的工具,尤其适用于自动化测试浏览器操作。它支持多种编程语言,包括Python,能够模拟用户对浏览器的各种操作,比如点击、输入、提交表单等。Selenium通过浏览器的扩展或驱动来...

    Selenium2 Python 自动化测试实战学习笔记

    13. **Jenkins集成**:将Selenium测试用例与Jenkins集成,实现持续集成,自动化执行测试并展示测试结果。 14. **测试报告**:利用第三方库如Allure或HTMLTestRunner生成详细的测试报告,便于分析测试结果。 七、...

    Selenium API 学习笔记(XMIND版)

    个人整理的Selenium API学习笔记,基于XMIND,层次分明,帮助学习理解。

    Selenium学习笔记

    Selenium 是一个强大的 Web 应用程序自动化测试框架,它提供了多种工具和组件来支持不同类型的测试需求。本文主要关注 Selenium 的三个组成部分:Selenium Core、Selenium IDE 和 Selenium Remote Control (RC)。 ...

    Selenium各种案例

    Selenium 是一个广泛使用的自动化测试工具,主要用于Web应用程序的测试。它支持多种编程语言,包括Python,使测试脚本的编写变得简单易行。在这个" Selenium各种案例 "中,我们将深入探讨如何使用Selenium与Python...

    Selenium学习笔记源代码

    本学习笔记源代码旨在帮助开发者和测试工程师深入理解和掌握Selenium的基本用法,通过实际操作和示例来提升技能。 在Selenium的学习过程中,你将接触到以下几个核心知识点: 1. **安装与配置**:首先,你需要了解...

    selenium入门学习,个人的笔记

    Selenium 入门学习笔记 一、自动化测试概念 自动化测试是由机器执行的测试行为,通过程序或工具来替代、辅助人工测试的手段。自动化测试的优点包括完成重复性工作、提高工作效率、抽象业务逻辑、使每次测试无差异...

    Selenium2学习笔记.txt

    ### Selenium2学习笔记知识点概述 #### 一、SQL与Selenium混搭场景解析 在给定的部分内容中,出现了一段SQL代码与Selenium代码的混合。这表明文档可能涉及了如何在Selenium自动化测试中集成数据库操作。下面将详细...

    11 Selenium笔记.zip

    本笔记将深入探讨Selenium的核心概念、功能以及如何有效地利用它进行Web自动化测试。 一、Selenium WebDriver Selenium WebDriver是Selenium的最新接口,它提供了一种标准的方式来控制浏览器,并与网页进行交互。...

Global site tag (gtag.js) - Google Analytics