亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
Selenium測試框架使用xml作為對象庫
作者:網絡轉載 發布時間:[ 2015/9/14 10:53:03 ] 推薦標簽:軟件測試工具,功能測試工具

  那么怎么獲取page的class路徑?
  可以通過反射機制獲。
  locatorMap = xmlUtils.readXMLDocument(path,
  this.getClass().getCanonicalName());
  這樣每次只按照page對象去加載其頁面的Locator對象,而不是一次性全部加載到內存
  hashMap可以通過key去獲取Locator,這樣也是極好的,比之前二維數組全部遍歷好多了
  封裝一個basePage去處理Locator對象
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;
}
}
  接下來可以在pageAction使用,如果使用頁面跳轉,可以使用反射機制,封裝一個PageFactory,根據傳入的Page類class創建對象
  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());
  }
  這樣,這個框架能夠實現一些基本操作,下一步還需要實現失敗重試截圖,配合虛擬機
  下載地址:https://github.com/tobecrazy/Demo

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 国产一区二区三区日韩 | 91成人抖音 | 久久精品第一页 | 色www永久免费视频 色www亚洲 | 亚洲精品一二三区 | 麻豆一区二区大豆行情 | 黄瓜视频深夜释放自己 | japanoldman老头同性 | 免费网站国产 | 97久久人人做人人爽人人澡 | 国产第四页 | 超薄全透明无内肉色丝袜 | 色成人综合 | 好吊色综合网天天高清 | 欧美亚洲h在线一区二区 | 午夜网站在线观看 | 最好看的中文字幕2019免费 | 欧美在线视频免费观看 | 91成人午夜性a一级毛片 | 伊人久久大香线蕉综合热线 | 亚洲高清在线看 | 一本大道在线 | 天天夜夜骑| 天天射天天爱天天干 | 26uuu另类欧美亚洲曰本 | 最新精品在线视频 | 五月在线 | 成年美女黄网站色大免费视频 | 国产99在线视频 | 一级毛片人与动免费观看 | 国产日本亚洲欧美 | ak福利视频| 丝袜美腿精尽福利网站 | 高清成人爽a毛片免费网站 高清国产精品久久久久 | 欧美第二页 | 精品在线小视频 | 日韩伦理影院 | 欧美黄成人免费网站大全 | 一个人的免费影院 | 亚洲mv国产精品mv日本mv | 免费的黄色片 |