您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源功能測(cè)試工具 > Selenium
Selenium測(cè)試框架使用xml作為對(duì)象庫(kù)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2015/9/14 10:53:03 ] 推薦標(biāo)簽:軟件測(cè)試工具,功能測(cè)試工具

  那么怎么獲取page的class路徑?
  可以通過(guò)反射機(jī)制獲。
  locatorMap = xmlUtils.readXMLDocument(path,
  this.getClass().getCanonicalName());
  這樣每次只按照page對(duì)象去加載其頁(yè)面的Locator對(duì)象,而不是一次性全部加載到內(nèi)存
  hashMap可以通過(guò)key去獲取Locator,這樣也是極好的,比之前二維數(shù)組全部遍歷好多了
  封裝一個(gè)basePage去處理Locator對(duì)象
package com.dbyl.libarary.utils;
import java.io.IOException;
import java.util.HashMap;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
public class BasePage {
protected WebDriver driver;
// protected String[][] locatorMap;
HashMap<String, Locator> locatorMap;
String path = "C:/Users/Young/workspace/Demo/src/com/dbyl/libarary/pageAction/UILibrary.xml";
protected Log log = new Log(this.getClass());
protected BasePage(WebDriver driver) throws Exception {
this.driver = driver;
log.debug(this.getClass().getCanonicalName());
// locatorMap = ReadExcelUtil.getLocatorMap();
locatorMap = xmlUtils.readXMLDocument(path,
this.getClass().getCanonicalName());
}
protected void type(Locator locator, String values) throws Exception {
WebElement e = findElement(driver, locator);
log.info("type value is:  " + values);
e.sendKeys(values);
}
protected void click(Locator locator) throws Exception {
WebElement e = findElement(driver, locator);
log.info("click button");
e.click();
}
protected void select(Locator locator, String value) throws Exception {
WebElement e = findElement(driver, locator);
Select select = new Select(e);
try {
log.info("select by Value " + value);
select.selectByValue(value);
} catch (Exception notByValue) {
log.info("select by VisibleText " + value);
select.selectByVisibleText(value);
}
}
protected void alertConfirm() {
Alert alert = driver.switchTo().alert();
try {
alert.accept();
} catch (Exception notFindAlert) {
throw notFindAlert;
}
}
protected void alertDismiss() {
Alert alert = driver.switchTo().alert();
try {
alert.dismiss();
} catch (Exception notFindAlert) {
throw notFindAlert;
}
}
protected String getAlertText() {
Alert alert = driver.switchTo().alert();
try {
return alert.getText();
} catch (Exception notFindAlert) {
throw notFindAlert;
}
}
protected void clickAndHold(Locator locator) throws IOException {
WebElement e = findElement(driver, locator);
Actions actions = new Actions(driver);
actions.clickAndHold(e).perform();
}
public WebDriver getDriver() {
return driver;
}
public void setDriver(WebDriver driver) {
this.driver = driver;
}
public WebElement getElement(Locator locator) throws IOException {
return getElement(this.getDriver(), locator);
}
/**
* get by parameter
*
* @author Young
* @param driver
* @param locator
* @return
* @throws IOException
*/
public WebElement getElement(WebDriver driver, Locator locator)
throws IOException {
locator = getLocator(locator.getElement());
WebElement e;
switch (locator.getBy()) {
case xpath:
log.debug("find element By xpath");
e = driver.findElement(By.xpath(locator.getElement()));
break;
case id:
log.debug("find element By id");
e = driver.findElement(By.id(locator.getElement()));
break;
case name:
log.debug("find element By name");
e = driver.findElement(By.name(locator.getElement()));
break;
case cssSelector:
log.debug("find element By cssSelector");
e = driver.findElement(By.cssSelector(locator.getElement()));
break;
case className:
log.debug("find element By className");
e = driver.findElement(By.className(locator.getElement()));
break;
case tagName:
log.debug("find element By tagName");
e = driver.findElement(By.tagName(locator.getElement()));
break;
case linkText:
log.debug("find element By linkText");
e = driver.findElement(By.linkText(locator.getElement()));
break;
case partialLinkText:
log.debug("find element By partialLinkText");
e = driver.findElement(By.partialLinkText(locator.getElement()));
break;
default:
e = driver.findElement(By.id(locator.getElement()));
}
return e;
}
public boolean isElementPresent(WebDriver driver, Locator myLocator,
int timeOut) throws IOException {
final Locator locator = getLocator(myLocator.getElement());
boolean isPresent = false;
WebDriverWait wait = new WebDriverWait(driver, 60);
isPresent = wait.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
return findElement(d, locator);
}
}).isDisplayed();
return isPresent;
}
/**
* This Method for check isPresent Locator
*
* @param locator
* @param timeOut
* @return
* @throws IOException
*/
public boolean isElementPresent(Locator locator, int timeOut)
throws IOException {
return isElementPresent(driver, locator, timeOut);
}
/**
*
* @param driver
* @param locator
* @return
*/
public WebElement findElement(WebDriver driver, final Locator locator) {
WebElement element = (new WebDriverWait(driver, locator.getWaitSec()))
.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
try {
return getElement(driver, locator);
} catch (IOException e) {
// TODO Auto-generated catch block
log.error("can't find element "
+ locator.getElement());
return null;
}
}
});
return element;
}
/**
* @author Young
*
* @param locatorName
* @return
* @throws IOException
*/
public Locator getLocator(String locatorName) throws IOException {
Locator locator;
// for (int i = 0; i < locatorMap.length; i++) {
// if (locatorMap[i][0].endsWith(locatorName)) {
// return locator = new Locator(locatorMap[i][1]);
// }
// }
// return locator = new Locator(locatorName);
locator = locatorMap.get(locatorName);
if (locator == null) {
locator = new Locator(locatorName);
}
return locator;
}
}
  接下來(lái)可以在pageAction使用,如果使用頁(yè)面跳轉(zhuǎn),可以使用反射機(jī)制,封裝一個(gè)PageFactory,根據(jù)傳入的Page類class創(chuàng)建對(duì)象
  PageFactory如下:
  package com.dbyl.libarary.utils;
  import java.lang.reflect.Constructor;
  import java.lang.reflect.InvocationTargetException;
  import org.openqa.selenium.WebDriver;
  public class PageFactory {
  public synchronized static Object getPage(Class<?> key,WebDriver d)
  throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
  String test = key.getCanonicalName();
  System.out.println(test);
  Class<?> clazz = Class.forName(test);
  Object obj = null;
  try {
  Constructor<?> constructor = clazz.getConstructor(WebDriver.class);
  obj = constructor.newInstance(d);
  } catch (InstantiationException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  } catch (IllegalAccessException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  return obj;
  }
  }
  使用方法:
  public static HomePage login(String email, String password)
  throws Exception {
  loginPage = new LoginPage(getDriver());
  loginPage.waitForPageLoad();
  loginPage.typeEmailInputBox(email);
  loginPage.typePasswordInputBox(password);
  loginPage.clickOnLoginButton();
  Assert.assertTrue(loginPage.isPrestentProfile(), "login failed");
  return (HomePage) PageFactory.getPage(HomePage.class, getDriver());
  }
  這樣,這個(gè)框架能夠?qū)崿F(xiàn)一些基本操作,下一步還需要實(shí)現(xiàn)失敗重試截圖,配合虛擬機(jī)
  下載地址:https://github.com/tobecrazy/Demo

上一頁(yè)123下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd