ReportFlow:
// click the Grid icon and switch to grid page
public void changeToGrid()
// click the Add/Locate icon in the grid page/or in the controller, and then add investment
public void addInvestmentToGrid(final String fundName, final String ticker, boolean isGridMode)
public void addInvestment(final String fundName, final String ticker, final boolean isGridMode)
// wait for the investment exists in the grid or in the controller
public void waitForInvestmentExistInGrid(final String fundName, final boolean isGridMode)
// click the ColumnManagement icon to enter the ColumnManament popover
public void openColumnSetManagement()
// click the cancel button in the Column Management popover
public void closeColumnSetManagementByCancel()
// remove the Column item in the Column Management popover and then click Done button
public void deleteColumnSet(final String columnName)
// click the posth columnset through clicking the columnset input box in the grid view
public String openColumnset(final int pos)
// click the list input box, then select and click the last investment list in Grid or in Controller
public String openRandomInvestmentList(String testCaseId, boolean isGridMode)
// click the list input box, then select and click the target list in the Grid or in the Controller
public void openInvestmentList(String listName, boolean isGridMode)
// click the checkbox to select it in the save list/column dialog after modifying the list and column
public void selectedCheckBox(WebElement element , boolean checked)
// create new investment list; this method has a wait time after clicking Enter
public void createInvestmentList(final String newName, final boolean isGridMode) // click the Grid icon and switch to grid page
public void changeToGrid(){
WebElement gridIcon = reportPage.getICONGrid(); //get the grid icon
SeleniumUtil.jsClick(driver, gridIcon);
SeleniumUtil.waitForElementVisible(driver, By.cssSelector("div#grid div#primary-header div.grid-header"),"Fail to switch to Grid."); // wait for the grid header to be visible
SeleniumUtil.waitForElementVisible(driver, By.cssSelector("div#grid div#grid-content div.grid-view"),"Fail to switch to Grid."); // wait for the grid content/view to be visible
} // click the Add/Locate icon in the grid page/or in the controller, and then add investment. This method will //also wait for the investment added/existing in the grid or in the controller
public void addInvestmentToGrid(final String fundName, final String ticker, boolean isGridMode) {
if(isGridMode){
reportPage.getAddLocateIconInGridMode().click();
}
else {
reportPage.getAddLocateIcon().click();
}
addInvestment(fundName, ticker, isGridMode);
} public void addInvestment(final String fundName, final String ticker, final boolean isGridMode) {
WebElement inputEl = reportPage.getAddLocateInput();
inputEl.clear();
inputEl.sendKeys(fundName);
final ReportPage page = reportPage;
Function<WebDriver, Boolean> waitFn = new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
List<WebElement> nameList = page.getAddLocateResultNameList();
List<WebElement> tickerList = page.getAddLocateResultTickerList();
int size = nameList.size();
for(int i = 0; i < size; i++){
WebElement nameEl = nameList.get(i);
WebElement tickerEl = tickerList.get(i);
String nameStr = nameEl.getText().trim();
if(ticker == null){
if(nameStr.contains(fundName.trim())){
nameEl.click();
waitForInvestmentExistInGrid(nameStr, isGridMode);
return true;
}
}
else {
String tickerStr = tickerEl.getText().split("\\|")[0].trim();
if(nameStr.contains(fundName.trim()) && tickerStr.equals(ticker)){
nameEl.click();
waitForInvestmentExistInGrid(nameStr, isGridMode);
return true;
}
}
}
} catch (Exception e) {
}
return false;
}
};
SeleniumUtil.createWait(driver).withMessage("Fail to add investment.").until(waitFn);
} // wait for the investment exists in the grid or in the controller
public void waitForInvestmentExistInGrid(final String fundName, final boolean isGridMode) {
final ReportPage page = reportPage;
Function<WebDriver, Boolean> waitFn = new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
List<WebElement> list;
if(isGridMode){
list = page.getInvestmentListInGridMode(); // get the investment list in the grid
}
else {
list = page.getInvestmentList(); // get the investment list in the controller
}
for(WebElement el : list){
if(el.getText().contains(fundName)){
return true;
}
}
} catch (Exception e) {
}
return false;
}
};
SeleniumUtil.createWait(driver).withMessage(fundName + " is not in Grid.").until(waitFn);
} // click the ColumnManagement icon to enter the ColumnManament popover
public void openColumnSetManagement(){
WebElement iconColumnManagement = reportPage.getICONColumnManagement();
SeleniumUtil.jsClick(driver, iconColumnManagement);
SeleniumUtil.sleep(2);
} // click the cancel button in the Column Management popover
public void closeColumnSetManagementByCancel(){
WebElement cancleBtn = reportPage.getCancleBtn();
SeleniumUtil.jsClick(driver, cancleBtn);
SeleniumUtil.sleep(2);
} // remove the Column item in the Column Management popover and then click Done button
public void deleteColumnSet(final String columnName) {
openColumnSetManagement(); // enter into ColumnManament popover
SeleniumUtil.sleep(2);
List<WebElement> itemList = reportPage.getColumnManagementItemList();
for(WebElement el : itemList){
WebElement nameEl = el.findElement(By.cssSelector("div.name"));
if(nameEl.getText().equals(columnName)){
el.findElement(By.cssSelector("span.removeMe")).click();
break;
}
}
Function<WebDriver, Boolean> waitFn = new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try{
List<String> list = getColumnNamesFromColumnset();
return !list.contains(columnName);
}
catch(Exception e){
}
return false;
}
};
SeleniumUtil.createWait(driver).withMessage("can't delete column:" + columnName).until(waitFn);
reportPage.getBtnDone().click();
} // click the posth columnset through clicking the columnset input box in the grid view
public String openColumnset(final int pos) {
WebElement columnsetEl = reportPage.getTXTColumnset();
columnsetEl.click();
Function<WebDriver, List<WebElement>> waitFn = new Function<WebDriver, List<WebElement>>() {
@Override
public List<WebElement> apply(WebDriver driver) {
try {
List<WebElement> columnsetList = reportPage.getDLGColumnsetList();
if (columnsetList.size() > pos) {
return columnsetList;
}
return null;
} catch (Exception e) {
return null;
}
}
};
List<WebElement> list = SeleniumUtil.createWait(driver).until(waitFn);
String columnsetName = list.get(pos).getText();
list.get(pos).click();
return columnsetName;
} // click the list input box, then select and click the last investment list in Grid or in Controller
public String openRandomInvestmentList(String testCaseId, boolean isGridMode) {
logger.info("start:openRandomInvestmentList"); WebElement nameInputEl;
if(isGridMode){
nameInputEl = reportPage.getListNameDisplayInGridMode();
}
else {
nameInputEl = reportPage.getListNameDisplay();
}
SeleniumUtil.sleep(3);
SeleniumUtil.jsClick(driver, nameInputEl); List<WebElement> list = SeleniumUtil.waitForAllElementsVisible(driver, By.cssSelector("div.popover-list div.entity-row"));
WebElement targetEl = list.get(list.size() -1); //select the last investment list
SeleniumUtil.scrollIntoView(driver, targetEl);
String curListName = targetEl.getAttribute("name");
if(!targetEl.isDisplayed()){
SeleniumUtil.scrollIntoView(driver, targetEl);
}
SeleniumUtil.jsClick(driver, targetEl);
return curListName;
} // click the list input box, then select and click the target list in the Grid or in the Controller,
// you should pass the list name as the target
public void openInvestmentList(String listName, boolean isGridMode){
WebElement nameInputEl;
if(isGridMode){
nameInputEl = reportPage.getListNameInputInGridMode();
}
else {
nameInputEl = reportPage.getListNameInput();
} SeleniumUtil.sleep(3);
if(!SeleniumUtil.isElementVisible(driver, By.cssSelector("div[name='" + listName + "']"))){
if(SeleniumUtil.getBrowserName(driver).equals("firefox")){
SeleniumUtil.waitForPageToLoad(driver);
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("$('div.controller-list>input').click();");
}else{
SeleniumUtil.jsClick(driver, nameInputEl);
}
}
WebElement targetEl = SeleniumUtil.waitForElementVisible(driver, By.cssSelector("div[name='" + listName + "']"));
targetEl.click();
} // click the checkbox to select it in the save list/column dialog after modifying the list and column
public void selectedCheckBox(WebElement element , boolean checked){
String classValue = element.getAttribute("class");
if(classValue.contains("selected") && checked){
return;
}
else{
element.click();
}
} // create new investment list; this method has a wait time after clicking Enter
public void createInvestmentList(final String newName, final boolean isGridMode) {
WebElement saveEl = reportPage.getBTNSave();
SeleniumUtil.jsClick(driver, saveEl);
SeleniumUtil.sleep(2);
WebElement nameInputEl;
if(isGridMode){
nameInputEl = reportPage.getListNameInputInGridMode();
}
else {
nameInputEl = reportPage.getListNameInput();
} nameInputEl.clear();
nameInputEl.sendKeys(newName);
nameInputEl.sendKeys(Keys.ENTER); Function<WebDriver, Boolean> waitFn = new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
WebElement nameInputEl;
if(isGridMode){
nameInputEl = reportPage.getListNameInputInGridMode();
}
else {
nameInputEl = reportPage.getListNameInput();
}
return newName.equals(nameInputEl.getAttribute("value"));
} catch (Exception e) {
return false;
}
}
};
// wait for the list is added successfully
SeleniumUtil.createWait(driver).withMessage("Fail to input name.").until(waitFn);
// wait for the message displayed
SeleniumUtil.waitForElementNotVisible(driver, By.cssSelector("span.message-content"));
} ------------------------------------------------
ReportPage // the input box in the top-left of the grid view
public WebElement getListNameInputInGridMode(); // the list name showing in the input box in the top-left of the grid view
public WebElement getListNameDisplayInGridMode() // the differences between getListNameInputInGridMode and getListNameDisplayInGridMode are:
// getListNameInputInGridMode().value == getListNameDisplayInGridMode()

Automation 的 ReportFlow的更多相关文章

  1. Workload Automation分析及其使用

    Workload Automation介绍 Workload Automation是提供一个在设备上运行各种workload的工具,使用Python编写.WA具有良好的框架结构,方便快捷的扩展.包含几 ...

  2. SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configur

    参见:http://msdn.microsoft.com/zh-cn/library/ms191188(SQL.105).aspx Ole Automation Procedures 选项 [本主题为 ...

  3. first Automation

    //创建一个容器    CEmbWordCntrItem * pItem = NULL;    CEmbWordDoc * pDoc = GetDocument();    pItem = new C ...

  4. SharePoint 2013 中的 PowerPoint Automation Services

    简介                许多大型和小型企业都将其 Microsoft SharePoint Server 库用作 Microsoft PowerPoint 演示文稿的存储库.所有这些企业在 ...

  5. Automation Test in Maya Plugin Development

    现状和问题- 开发插件的功能A的时候随手建立场景, 测试插件的功能A. 测试通过后,测试场景就被丢掉.- 发现插件的功能A有bug时, 修改代码, 然后随手建立场景, 测试bug. 测试通过后,测试场 ...

  6. Study plan for automation test framework

    虽然部门的automation建立起来有两年多,去年项目一直很忙,仅限于应用(e.g 运行脚本测试或者写一些简短的测试脚本),但是一直没有深入研究其组成框架.近期希望抽出时间来做深入学习. 初步计划从 ...

  7. 自动化测试 using System.Windows.Automation;

    frameworke3.0 及以上 using System.Windows.Automation; UIAutomationClient.dll UIAutomationClientsideProv ...

  8. UI Automation Test

    UI Automation test is based on the windows API. U can find the UI Automation MSDN file from http://m ...

  9. Azure Automation (1) 入门

    <Windows Azure Platform 系列文章目录> 通过Azure Automation(自动化),开发人员可以自动完成通常要在云环境中执行的手动.长时间进行.易出错且重复性高 ...

随机推荐

  1. Triangular Pastures POJ - 1948

    Triangular Pastures POJ - 1948 sum表示木条的总长.a[i]表示第i根木条长度.ans[i][j][k]表示用前i条木条,摆成两条长度分别为j和k的边是否可能. 那么a ...

  2. dalvik.system.VMRuntime 隐藏api的迷惑

    [Android UI界面]关于dalvik.system.VMRuntime 的 使用迷惑 我也遇到了相同问题.不知楼主现在解决了没有? 回答1: [Android UI界面]关于dalvik.sy ...

  3. tomcat 修改端口

    修改tomcat端口号: a) 去tomcat安装目录(或者解压目录)下的“conf”文件夹中找到文件“server.xml”(本例:“D:\Program Files\Apache Software ...

  4. 设置webbrowser浏览器内核

    var hklm = Microsoft.Win32.Registry.LocalMachine;            var lmRun64 = hklm.OpenSubKey(@"SO ...

  5. AJPFX总结JAVA基本数据类型

    1:关键字(掌握)        (1)被Java语言赋予特定含义的单词        (2)特点:                全部小写.        (3)注意事项:              ...

  6. java 线程池第一篇 之 ThreadPoolExcutor

    一:什么是线程池? java 线程池是将大量的线程集中管理的类,包括对线程的创建,资源的管理,线程生命周期的管理.当系统中存在大量的异步任务的时候就考虑使用java线程池管理所有的线程.减少系统资源的 ...

  7. iOS programming Code Snippet Library

    iOS programming  Code Snippet Library  The freebie code comes from the code snippet library. 代码来自cod ...

  8. NLog小记

    NLog安装: Install-Package NLog NLog配置: <?xml version="1.0" encoding="utf-8" ?&g ...

  9. CAD使用GetxDataDouble读数据(com接口)

    主要用到函数说明: MxDrawEntity::GetxDataDouble2 读取一个Double扩展数据,详细说明如下: 参数 说明 [in] LONG lItem 该值所在位置 [out, re ...

  10. 使用webpack+vue.js构建前端工程化

    参考文章:https://blog.csdn.net/qq_40208605/article/details/80661572 使用webpack+vue.js构建前端工程化本篇主要介绍三块知识点: ...