首页 > 代码库 > Automation 的 ReportFlow

Automation 的 ReportFlow

ReportFlow:// click the Grid icon and switch to grid pagepublic void changeToGrid()// click the Add/Locate icon in the grid page/or in the controller, and then add investmentpublic 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 controllerpublic void waitForInvestmentExistInGrid(final String fundName, final boolean isGridMode)// click the ColumnManagement icon to enter the ColumnManament popoverpublic void openColumnSetManagement()// click the cancel button in the Column Management popoverpublic void closeColumnSetManagementByCancel()// remove the Column item in the Column Management popover and then click Done buttonpublic void deleteColumnSet(final String columnName)// click the posth columnset through clicking the columnset input box in the grid viewpublic String openColumnset(final int pos)// click the list input box, then select and click the last investment list in Grid or in Controllerpublic String openRandomInvestmentList(String testCaseId, boolean isGridMode)// click the list input box, then select and click the target list in the Grid or in the Controllerpublic void openInvestmentList(String listName, boolean isGridMode)// click the checkbox to select it in the save list/column dialog after modifying the list and columnpublic void selectedCheckBox(WebElement element , boolean checked)// create new investment list; this method has a wait time after clicking Enterpublic void createInvestmentList(final String newName, final boolean isGridMode)

// click the Grid icon and switch to grid pagepublic 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 controllerpublic 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 controllerpublic 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 popoverpublic void openColumnSetManagement(){ WebElement iconColumnManagement = reportPage.getICONColumnManagement(); SeleniumUtil.jsClick(driver, iconColumnManagement); SeleniumUtil.sleep(2); }// click the cancel button in the Column Management popoverpublic 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 buttonpublic 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 viewpublic 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 Controllerpublic 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 columnpublic 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 Enterpublic 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 viewpublic WebElement getListNameInputInGridMode(); // the list name showing in the input box in the top-left of the grid viewpublic WebElement getListNameDisplayInGridMode()// the differences between getListNameInputInGridMode and getListNameDisplayInGridMode are: // getListNameInputInGridMode().value =http://www.mamicode.com/= getListNameDisplayInGridMode()