- 浏览: 11265 次
- 性别:
- 来自: 杭州
最新评论
单位里需要自动化测试,于是就抽空看了下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的例子。
selenium RC demo的代码还没有全部完成
就先放一个架子上来吧
关于selenium sever。
下载了jar包直接打命令就可以起了。
java -jar yourjarpath/jarName.jar
官网上的资料并不多,主要是分成了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
相关推荐
1. **创建Java项目**:首先,创建一个新的Java项目,并导入Selenium相关的JAR包,包括selenium-java和selenium-server-standalone。 2. **引入依赖**:将所有必要的库文件添加到项目的Referenced Libraries中。 3. *...
自动化测试:Selenium webdriver学习笔记 C#版 在本篇笔记中,我们将讨论 Selenium webdriver 的自动化测试中的对象定位方法。对象定位是自动化测试中非常重要的一步骤,它决定了我们的测试脚本是否能够正确地找到...
#### 二、编写Selenium测试脚本 - **导入必需类库**:在编写测试脚本前,需要导入Selenium提供的API,如`com.thoughtworks.selenium.Selenium`以及JUnit的测试框架类。 - **示例:测试Google搜索** - **初始化...
Selenium 是一个强大的开源自动化测试框架,广泛应用于Web应用程序的测试。相较于商业支持的QTP(QuickTest Professional),Selenium 凭借其开源、稳定性和易用性赢得了广大测试人员的喜爱。接下来,我们将深入探讨...
接下来,笔记展示了如何导入selenium库中的webdriver模块,这是Selenium自动化测试的基础。 示例代码中演示了如何创建一个新的Firefox驱动实例,并最大化窗口。之后使用driver.get方法访问了百度的首页,并利用find...
本笔记主要涵盖了Selenium自动化测试的相关知识点,包括Pycharm设置、pytest单文件调试、Unittests多文件调试、代码编辑快捷键、搜索/替换快捷键、代码运行快捷键、代码调试快捷键、应用搜索快捷键、代码重构快捷键...
1.1 **Selenium IDE**: Selenium IDE是一个集成开发环境,专门用于构建Selenium测试用例。作为一个Firefox插件,它非常易于使用,并且包含一个上下文菜单,允许用户选择浏览器当前页面上的UI元素,然后从预定义参数...
【Selenium 自动化测试】 Selenium 是一个强大的开源 Web UI 自动化测试工具,它支持多种编程语言,如 Java、Python、C#、Ruby 和 Perl,使得开发者可以根据自己的喜好选择合适的语言进行测试脚本编写。Selenium 的...
### Selenium WebDriver 学习笔记知识点详解 #### 一、元素定位 Selenium WebDriver 提供了丰富的API用于元素定位,常见的定位策略包括: - **ID**:`driver.findElement(By.id("elementId"))` - **Name**:`driver...
Selenium是一个用于Web应用程序测试的工具,尤其适用于自动化测试浏览器操作。它支持多种编程语言,包括Python,能够模拟用户对浏览器的各种操作,比如点击、输入、提交表单等。Selenium通过浏览器的扩展或驱动来...
13. **Jenkins集成**:将Selenium测试用例与Jenkins集成,实现持续集成,自动化执行测试并展示测试结果。 14. **测试报告**:利用第三方库如Allure或HTMLTestRunner生成详细的测试报告,便于分析测试结果。 七、...
个人整理的Selenium API学习笔记,基于XMIND,层次分明,帮助学习理解。
Selenium 是一个强大的 Web 应用程序自动化测试框架,它提供了多种工具和组件来支持不同类型的测试需求。本文主要关注 Selenium 的三个组成部分:Selenium Core、Selenium IDE 和 Selenium Remote Control (RC)。 ...
Selenium 是一个广泛使用的自动化测试工具,主要用于Web应用程序的测试。它支持多种编程语言,包括Python,使测试脚本的编写变得简单易行。在这个" Selenium各种案例 "中,我们将深入探讨如何使用Selenium与Python...
本学习笔记源代码旨在帮助开发者和测试工程师深入理解和掌握Selenium的基本用法,通过实际操作和示例来提升技能。 在Selenium的学习过程中,你将接触到以下几个核心知识点: 1. **安装与配置**:首先,你需要了解...
Selenium 入门学习笔记 一、自动化测试概念 自动化测试是由机器执行的测试行为,通过程序或工具来替代、辅助人工测试的手段。自动化测试的优点包括完成重复性工作、提高工作效率、抽象业务逻辑、使每次测试无差异...
### Selenium2学习笔记知识点概述 #### 一、SQL与Selenium混搭场景解析 在给定的部分内容中,出现了一段SQL代码与Selenium代码的混合。这表明文档可能涉及了如何在Selenium自动化测试中集成数据库操作。下面将详细...
本笔记将深入探讨Selenium的核心概念、功能以及如何有效地利用它进行Web自动化测试。 一、Selenium WebDriver Selenium WebDriver是Selenium的最新接口,它提供了一种标准的方式来控制浏览器,并与网页进行交互。...