V03
package common; import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Random; import java.util.Set; import java.util.regex.Pattern; import org.apache.log4j.Logger; import org.apache.poi.poifs.crypt.dsig.KeyInfoKeySelector; import org.apache.tika.metadata.WordPerfect; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.Cookie; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.interactions.SendKeysAction; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.Select; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert; import pojo.Page; import pojo.UIElement; import utils.BrowserUtils; import utils.RegexUtils; import utils.XmlUtils; public class BasePage { private final static Logger logger = Logger.getLogger(BasePage.class); /** * 获取浏览器 * @return 浏览器 */ public static WebDriver getBroswer() { return BrowserUtils.getDriver(); } /** * 获取JavascriptExecutor * @return JavascriptExecutor */ public static JavascriptExecutor getJs() { return BrowserUtils.getJavascriptExecutor(); } /** * 获取WebDriverWait * @return WebDriverWait */ public static WebDriverWait getWait() { return BrowserUtils.getWebDriverWait(); } /** * 创建本地浏览器或者远程浏览器 * @param type type→本地/远程 * @param browserType 浏览器类型 */ public static void createBroswer(String type,String browserType) { logger.info("================================打开"+type+"浏览器("+browserType+") ========================================"); if (type.contains("本地")) { BrowserUtils.openBrowser(browserType);; }else if (type.contains("远程")) { BrowserUtils.openRemoteBrowser(browserType); } } /** * 创建本地浏览器 * @param browserType 浏览器类型 */ public static void createBrowser(String browserType) { logger.info("================================打开远程端浏览器("+browserType+") ========================================"); BrowserUtils.openBrowser(browserType); } /** * 创建远程浏览器 * @param browserType 浏览器类型 */ public static void createRemoteBrowser(String browserType) { logger.info("================================打开本地浏览器("+browserType+") ========================================"); BrowserUtils.openRemoteBrowser(browserType); } /** * 清楚缓存 */ public static void ClearCache () { logger.info("================================开始清除缓存 ========================================"); Set<Cookie> coo = getBroswer().manage().getCookies(); //打印Cookie logger.info("cookies信息:【"+coo.toString()+"】"); //清除所有的缓存 getBroswer().manage().deleteAllCookies(); } /** * 跳转到指定的url * @param url 需跳转的url地址 */ public static void getUrl(String url) { logger.info("浏览器跳转到:【"+url+"】"); getBroswer().get(url); } /** * 硬性等待 * @param time 毫秒 */ public static void waitTime(int time) { try { logger.info("线程等待:【"+(double)time/1000+"】秒"); Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 最大化窗口 */ public static void maxWindow() { logger.info("window窗口最大化"); getBroswer().manage().window().maximize(); } /** * 根据获取的标题来切换句柄 获取的标题包含预期的标题才能切换 * @param title 标题 */ public void switchWindowByTitle(String title) { Set<String> handles = getBroswer().getWindowHandles(); logger.info("获取【handles大小】为:【"+handles.size()+"】,【获取的handles】为:【"+handles.toString()+"】"); for (String handle : handles) { if (getBroswer().getTitle().contains(title)) { logger.info("当前句柄的【标题】:【"+getBroswer().getTitle()+"】,符合预期的标题,切换成功"); break; }else { logger.info("当前句柄的【标题】:【"+getBroswer().getTitle()+"】,切换句柄,寻找符合标题的句柄"); getBroswer().switchTo().window(handle); } } } //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== public static void main(String[] args) { name(args); } //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== public static void name(String[] args) { createBrowser( "chrome"); maxWindow(); getBroswer().manage().deleteAllCookies(); getBroswer().get("http://egis-cspi-padis-dmzstg1.pingan.com.cn/cspi-internet/palogin.jsp"); input(By.cssSelector("#userName"), "01713801151301"); input(By.cssSelector("#passwordInput"), "a8888888"); try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } getBroswer().switchTo().defaultContent(); try { getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); }catch(Exception e) { if (assertEleContains(By.cssSelector("#center"), "没有找到相应信息")) { getBroswer().navigate().refresh(); waitTime(2000); if (assertEleContains(By.cssSelector("#warmTips"), "温馨提示")){ getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); }else { getBroswer().switchTo().alert().accept(); waitTime(2000); input(By.cssSelector("#passwordInput"), "a8888888"); try { Thread.sleep(10000); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); } }} /** * 点击提示关闭按钮 */ getBroswer().switchTo().defaultContent(); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); waitVisibilityOfElementLocated(By.cssSelector("#warmTips")); clickByJs(getBroswer().findElement(By.cssSelector("#warmTips #closeWarmTips"))); /** * 通过键盘按钮点击回车键 */ try { Thread.sleep(6000); Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); robot.delay(500); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /** * 点击alter弹框 */ // getBroswer().switchTo().alert().accept(); /** * 点击提示关闭按钮 */ clickByJs( waitVisibilityOfElementLocated(By.cssSelector("#warmTips #closeWarmTips"))); getBroswer().switchTo().defaultContent(); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); /** * 点击悬浮保全处理查询 */ new Actions(getBroswer()) .moveToElement( waitVisibilityOfElementLocated(By.xpath("//a[contains(text(),'保全处理查询')]"))).perform(); /** * 点击余额管理 */ clickByJs(waitVisibilityOfElementLocated(By.xpath("//a[contains(text(),'余额管理')]"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); /** * 保单号 */ String policyNo = "GP02002024242842"; /** * 输入保单号 */ waitVisibilityOfElementLocated(By.cssSelector("#queryPolNoT")).sendKeys(policyNo); /** * 点击查询 */ waitElementToBeClickable(By.cssSelector("[onclick*='queryPolInfoByPolNo()']")).click(); String beforeText = waitVisibilityOfElementLocated(By.xpath("//th[contains(text(),'保单号')]/parent::tr/following-sibling::tr")).getText(); String beforeMOney = RegexUtils.regexSingleMatch("(?<=\\s)\\d+\\.\\d+(?=\\s)", beforeText); Double beforeMOney1 = Double.parseDouble(beforeMOney); System.out.println(beforeText+" "+beforeMOney1); // String beforeText = waitVisibilityOfElementLocated(By.xpath("//th[contains(text(),'保单号')]/parent::tr/following-sibling::tr")).getText(); // String beforeMOney = RegexUtils.regexSingleMatch("(?<=\\s)\\d+\\.\\d+(?=\\s)", beforeText); // Double beforeMOney1 = Double.parseDouble(beforeMOney); // System.out.println(beforeText+" "+beforeMOney1); /** * 验证查询后数据是否正确 assertPolInfoLink * 是否包含查询的保单号 */ boolean assertContains = assertRowContains(By.xpath("//th[contains(text(),'保单号')]/parent::tr/following-sibling::tr"),policyNo); /** * 查询出来的保单号是否唯一 */ System.out.println("保单查询后是否包含:【"+assertContains+"】"); boolean assertInfoCountOne = assertInfoCountOne(By.xpath("//th[contains(text(),'保单号')]/parent::tr/following-sibling::tr") ); System.out.println("保单查询后是否唯一:【"+assertInfoCountOne+"】"); /** * 点击保单链接 */ waitElementToBeClickable(By.cssSelector("a[onclick*=displayDetail]")).click(); /** * 验证保单链接功能 * 包含 团体保单详情页 * 保单信息 * 投保人信息 * 保障信息 * 层级信息 */ boolean assertEleContains2 = assertEleContains(By.cssSelector("#dialogContent.process-content "), "block", "style"); System.out.println("是否包含属性值:"+assertEleContains2); boolean assertEleContains = assertEleContains(By.cssSelector("#dialogContent.process-content "),"团体保单详情页" ); System.out.println("元素文本值是否包含:"+assertEleContains); assertEleContains = assertEleContains(By.cssSelector("#dialogContent.process-content "),"保单信息" ); System.out.println("元素文本值是否包含:"+assertEleContains); assertEleContains = assertEleContains(By.cssSelector("#dialogContent.process-content "),"投保人信息" ); System.out.println("元素文本值是否包含:"+assertEleContains); assertEleContains = assertEleContains(By.cssSelector("#dialogContent.process-content "),"保障信息" ); System.out.println("元素文本值是否包含:"+assertEleContains); assertEleContains = assertEleContains(By.cssSelector("#dialogContent.process-content "),"层级信息" ); System.out.println("元素文本值是否包含:"+assertEleContains); /** * 滑动到层级信息 */ scrollIntoTopView(waitPresenceOfElementLocated(By.xpath("//*[contains(text(),'层级信息')]"))); waitTime(5000); System.out.println(" 已经滑懂了"); // scrollInTobottomView(waitPresenceOfElementLocated(By.xpath("//*[contains(text(),'层级信息')]"))); // waitTime(5000); /** * 点击职业链接 */ waitElementToBeClickable(By.cssSelector("[onclick*='showProfCode']")).click(); /** * 点击职业层级链接后显示的层级详情 */ assertEleContains2 = assertEleContains(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]"), "", "style"); System.out.println("是否包含属性值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]"), "职业描述"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]"), "职业代码"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertInfoCountBigOne(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]//td[2][not(contains(text(),'职业'))]/parent::tr")); System.out.println("元素是否大于等于1个元素:"+assertEleContains2); /** * 点击层级明细链接 * showDetailNew */ waitElementToBeClickable(By.cssSelector("[onclick*='showDetailNew']")).click(); assertEleContains2 = assertEleContains(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]"), "", "style"); System.out.println("是否包含属性值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]"), "保险金额"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]"), "赔付比例"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertInfoCountBigOne(By.xpath("//tr[@class='show-li' and not(contains(@style,'none'))]//td[2][not(contains(text(),'保险'))]/parent::tr")); System.out.println("元素是否大于等于1个元素:"+assertEleContains2); /** * 点击关闭保单详情按钮 */ clickByJs(waitElementToBeClickable(By.cssSelector("[onclick*='closetxt']"))); /** * 点击转出按钮 */ clickByJs(waitElementToBeClickable(By.cssSelector("[onclick*='queryFundAmount']"))); /** * 验证传出按钮是否跳余额转出页面 */ assertEleContains2 = assertEleContains(By.cssSelector("div#returnsDiv"), "单位对公账户"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.cssSelector("div#returnsDiv"), "余额转出明细"); System.out.println("是否包含文本值:"+assertEleContains2); /** * 点击余额转出明细 */ click(By.cssSelector("[onclick*='historyRefundData']")); /** * 输入 余额转出明细 - 开始日期输入框 */ modifyValueByJs(waitVisibilityOfElementLocated(By.cssSelector("input#beginDate")), "2021-01-01"); /** * 输入 余额转出明细 - 结束日期输入框 */ modifyValueByJs(waitVisibilityOfElementLocated(By.cssSelector("input#endDate")), "2021-03-13"); /** * 选择 余额转出明细 - 转出状态 */ new Select(waitVisibilityOfElementLocated(By.cssSelector("select#applyStatus"))).selectByValue("P"); /** * 点击余额转出明细 - 点击查询 */ clickByJs(waitVisibilityOfElementLocated(By.cssSelector("[onclick*='submitQuery']"))); // click(By.cssSelector("[onclick*='submitQuery']")); /** * 断言查询后展示的数>=1 */ waitTime(2000); assertEleContains2 = assertInfoCountBigOne(By.cssSelector(".use_money_tr")); System.out.println("元素是否大于等于1个元素:"+assertEleContains2); /** * 判断余额转出明细详情页 是否包含 div#history_data_display * 流水号 * 转移金额 */ assertEleContains2 = assertEleContains(By.cssSelector("div#history_data_display"), "流水号"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.cssSelector("div#history_data_display"), "转移金额"); System.out.println("是否包含文本值:"+assertEleContains2); /** * 余额转出明细详情页 返回按钮[onclick*='goBack()'] */ click(By.cssSelector("[onclick*='goBack()']")); /** * 点击 单位对公账户链接 */ click(By.cssSelector("[onclick*='setBankAcounts']")); /** * 单位对公账户链接 后显示的用户须知 */ assertEleContains2 = assertEleContains(By.cssSelector("div#infoDiv"),"用户告知"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.cssSelector("div#infoDiv"),"注意事项"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.cssSelector("div#infoDiv"),"责任免除"); /** * 单位对公账户链接 接受按钮 */ click(By.cssSelector("[onclick*='goToNext']")); /** * 账户信息维护页-开户银行 */ waitVisibilityOfElementLocated(By.cssSelector("#bankName")); // input(By.cssSelector("input#bankName"), "a"); try { Robot r = new Robot(); waitTime(1000); r.keyPress(KeyEvent.VK_TAB); r.keyRelease(KeyEvent.VK_TAB); r.delay(200); waitTime(1000); r.keyPress(KeyEvent.VK_TAB); r.keyRelease(KeyEvent.VK_TAB); r.delay(200); waitTime(1000); r.keyPress(KeyEvent.VK_B); r.keyRelease(KeyEvent.VK_B); r.delay(200); waitTime(1000); waitTime(1000); r.keyPress(KeyEvent.VK_ENTER); r.keyRelease(KeyEvent.VK_ENTER); r.delay(200); waitTime(1000); r.keyPress(KeyEvent.VK_DOWN); r.keyRelease(KeyEvent.VK_DOWN); r.delay(200); waitTime(1000); r.keyPress(KeyEvent.VK_ENTER); r.keyRelease(KeyEvent.VK_ENTER); r.delay(200); waitTime(1000); /** * 输入账户信息维护-分行 */ waitTime(1000); r.keyPress(KeyEvent.VK_TAB); r.keyRelease(KeyEvent.VK_TAB); r.delay(200); waitTime(1000);waitTime(1000); r.keyPress(KeyEvent.VK_B); r.keyRelease(KeyEvent.VK_B); r.delay(200); waitTime(1000); r.keyPress(KeyEvent.VK_ENTER); r.keyRelease(KeyEvent.VK_ENTER); r.delay(200); waitTime(1000); waitTime(1000); r.keyPress(KeyEvent.VK_DOWN); r.keyRelease(KeyEvent.VK_DOWN); r.delay(200); waitTime(1000); r.keyPress(KeyEvent.VK_ENTER); r.keyRelease(KeyEvent.VK_ENTER); r.delay(200); waitTime(1000); /** * 账户信息维护-支行 * 输入支行 */ input(By.cssSelector("#subbranchBank"), "自动化支行"+new Random().nextInt(1000)); /** * 账户信息维护-银行账户 * bankAccount */ input(By.cssSelector("#bankAccount"), "6217855300003734772"); /** * 点击账户信息维护-确认按钮 doSaveButton */ click(By.cssSelector("#doSaveButton")); /** * 点击账户信息维护-弹框确定按钮 */ boolean assertAlterContains = assertAlterContains("银行账号信息保存成功"); System.out.println("assertAlterContains:"+assertAlterContains); waitTime(1000); r.keyPress(KeyEvent.VK_ENTER); r.keyRelease(KeyEvent.VK_ENTER); r.delay(200); waitTime(1000); } catch (Exception e2) { // TODO Auto-generated catch block e2.printStackTrace(); } /** * 点击转出按钮 */ clickByJs(waitElementToBeClickable(By.cssSelector("[onclick*='queryFundAmount']"))); /** * 点击 单位对公账户链接 */ click(By.cssSelector("[onclick*='setBankAcounts']"));/** * 单位对公账户链接 接受按钮 */ click(By.cssSelector("[onclick*='goToNext']")); /** * 历史维护账户信息 历史维护账户信息按钮 */ click(By.cssSelector("[onclick*='queryHistoryBank']")); /** * 历史维护账号信息-历史信息勾选框 * 判断是否包含页面带出历史账户信息提示 */ boolean assertEleContains3 = assertEleContains(By.cssSelector("#bankDiv2"),"页面带出历史账户信息"); System.out.println(assertEleContains3); /** * 判断历史账户信息行唯一 */ boolean assertInfoCountOne2 = assertInfoCountOne(By.cssSelector("#bankDiv2 [id*='items']")); System.out.println("assertInfoCountOne2:"+assertInfoCountOne2); String text = waitVisibilityOfElementLocated(By.cssSelector("#bankno1")).getText(); System.out.println(text); /** * 点击历史维护账号信息-历史账户勾选框 */ click(By.cssSelector("#check1")); waitTime(2000); /** * 断言历史维护账号信息-跳转到 历史维护账号信息 */ boolean assertEleContains4 = assertEleContains(By.cssSelector("#bankDiv"),"账户信息维护"); System.out.println(assertEleContains4); /** * 账户信息维护-确认按钮 * */ click(By.cssSelector("#doSaveButton")); /** * 点击账户信息维护-弹框确定按钮 */ boolean assertAlterContains = assertAlterContains("银行账号信息保存成功"); System.out.println("assertAlterContains:"+assertAlterContains); waitTime(1000); Robot r; try { r = new Robot(); r.keyPress(KeyEvent.VK_ENTER); r.keyRelease(KeyEvent.VK_ENTER); r.delay(200); waitTime(1000); } catch (Exception e3) { // TODO Auto-generated catch block e3.printStackTrace(); } /** * 点击转出按钮 */ clickByJs(waitElementToBeClickable(By.cssSelector("[onclick*='queryFundAmount']"))); /** * 余额转出-可用转出金额输入框 */ String refundMoney = "1"; modifyValueByJs(waitVisibilityOfElementLocated(By.cssSelector("input#amount")), refundMoney); /** * [onclick*='callRefundSubmit'] * 余额转出-确定转出按钮 */ click(By.cssSelector("[onclick*='callRefundSubmit']")); /** * 判断余额转出-确定转出后-处理完成提示框是否包含转出的价格 * */ boolean assertEleContains5 = assertEleContains(By.cssSelector("div#suPag"),"余额"+refundMoney+"元"); System.out.println("assertEleContains5:"+assertEleContains5); /** * 余额转出-确定转出后-处理完成提示框-确定按钮 */ click(By.cssSelector("[onclick*='gotoView']")); /** * 余额管理-转入按钮 */ click(By.cssSelector("[onclick*='findUseableBalacePol']")); /** * 余额管理-余额转入 * detail_useable_div * 判断 余额转入是否包含 余额转入详情页 */ assertEleContains(By.cssSelector("div#detail_useable_div"),"余额转入"); assertEleContains(By.cssSelector("div#detail_useable_div"),policyNo); assertEleContains(By.cssSelector("div#detail_useable_div"),"转移余额"); assertEleContains(By.cssSelector("div#detail_useable_div"),"可用余额"); /** * 余额管理-余额转入-余额互转明细链接 */ click(By.cssSelector("[onclick*='historyData']")); //==================================================== /** * 输入 余额互转明细 - 开始日期输入框 */ modifyValueByJs(waitVisibilityOfElementLocated(By.cssSelector("input#applyBeginDate")), "2021-01-01"); /** * 输入 余额互转明细 - 结束日期输入框 */ modifyValueByJs(waitVisibilityOfElementLocated(By.cssSelector("input#applyEndDate")), "2021-03-13"); /** * 选择 余额互转明细 - 支付模式 */ new Select(waitVisibilityOfElementLocated(By.cssSelector("select#payMode"))).selectByValue("1"); /** * 点击余额互转明细 - 点击查询 */ clickByJs(waitVisibilityOfElementLocated(By.cssSelector("[onclick*='histMovePage']"))); // click(By.cssSelector("[onclick*='submitQuery']")); /** * 断言查询后展示的数>=1 */ waitTime(2000); assertEleContains2 = assertInfoCountBigOne(By.cssSelector(".use_money_tr")); System.out.println("元素是否大于等于1个元素:"+assertEleContains2); /** * 判断余额转出明细详情页 是否包含 div#history_data_display * 流水号 * 转移金额 */ assertEleContains2 = assertEleContains(By.cssSelector("div#history_data_display"), "流水号"); System.out.println("是否包含文本值:"+assertEleContains2); assertEleContains2 = assertEleContains(By.cssSelector("div#history_data_display"), "转移金额"); System.out.println("是否包含文本值:"+assertEleContains2); /** * 余额管理查询页 - 查询结果行 boolean assertContains = assertRowContains(By.cssSelector("#user_pol_div_id .img-position tr"),policyNo); */ String text2 = waitVisibilityOfElementLocated(By.xpath("//th[contains(text(),'保单号')]/parent::tr/following-sibling::tr")).getText(); String regexSingleMatch = RegexUtils.regexSingleMatch("(?<=\\s)\\d+\\.\\d+(?=\\s)", text2); Double d = Double.parseDouble(regexSingleMatch); System.out.println(text2+" "+d); if (beforeMOney1==(d+Double.parseDouble(refundMoney))) { System.out.println("true"); }else { System.out.println("false"); } /** * 点击余额互转明细 - 返回 ackWay(); */ clickByJs(waitVisibilityOfElementLocated(By.cssSelector("[onclick*='backWay']"))); /** * 暂时没有转入订单 余额转入-确定转入按钮 */ clickByJs(waitVisibilityOfElementLocated(By.cssSelector("[onclick*='submitConvertMoney']"))); } // policyNo = "GP02002024242842"; /** * 测试保单连接 * @param policyNo */ public void checkPolicyLink(String policyNo) { yuEGuanLiBaseFun(policyNo); waitElementToBeClickable(By.cssSelector("a[onclick*=displayDetail]")).click(); } /** * 测试职业链接 * @param policyNo */ public void checkShowProfCode(String policyNo) { checkPolicyLink(policyNo); /** * 滑动到层级信息 */ scrollIntoTopView(waitPresenceOfElementLocated(By.xpath("//*[contains(text(),'层级信息')]"))); /** * 点击职业链接 */ waitElementToBeClickable(By.cssSelector("[onclick*='showProfCode']")).click(); } /** * 测试层级明细链接 * @param policyNo */ public void checkshowDetailNew(String policyNo) { checkPolicyLink(policyNo); /** * 滑动到层级信息 */ scrollIntoTopView(waitPresenceOfElementLocated(By.xpath("//*[contains(text(),'层级信息')]"))); /** * 点击层级明细链接 * */ waitElementToBeClickable(By.cssSelector("[onclick*='showDetailNew']")).click(); } /** * 测试 转出功能 * String refundMoney = "1"; * @param policyNo */ public void checkQueryFundAmount(String policyNo,String refundMoney) { yuEGuanLiBaseFun(policyNo); /** * 点击转出 */ clickByJs(waitElementToBeClickable(By.cssSelector("[onclick*='queryFundAmount']"))); /** * 余额转出-可用转出金额输入框 */ modifyValueByJs(waitVisibilityOfElementLocated(By.cssSelector("input#amount")), refundMoney); /** * [onclick*='callRefundSubmit'] * 余额转出-确定转出按钮 */ click(By.cssSelector("[onclick*='callRefundSubmit']")); /** * 判断余额转出-确定转出后-处理完成提示框是否包含转出的价格 * */ boolean assertEleContains5 = assertEleContains(By.cssSelector("div#suPag"),"余额"+refundMoney+"元"); System.out.println("assertEleContains5:"+assertEleContains5); /** * 余额转出-确定转出后-处理完成提示框-确定按钮 */ click(By.cssSelector("[onclick*='gotoView']")); } /** * 点击余额管理 输入保单号查询 * @param policyNo * @return 返回未转入转出的金额 double 类型 */ public static Double yuEGuanLiBaseFun(String policyNo ) { try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } getBroswer().switchTo().defaultContent(); try { getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); }catch(Exception e) { if (assertEleContains(By.cssSelector("#center"), "没有找到相应信息")) { getBroswer().navigate().refresh(); waitTime(2000); if (assertEleContains(By.cssSelector("#warmTips"), "温馨提示")){ getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); }else { getBroswer().switchTo().alert().accept(); waitTime(2000); input(By.cssSelector("#passwordInput"), "a8888888"); try { Thread.sleep(10000); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); } }} /** * 点击提示关闭按钮 */ getBroswer().switchTo().defaultContent(); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); waitVisibilityOfElementLocated(By.cssSelector("#warmTips")); clickByJs(getBroswer().findElement(By.cssSelector("#warmTips #closeWarmTips"))); /** * 通过键盘按钮点击回车键 */ try { Thread.sleep(6000); Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); robot.delay(500); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /** * 点击alter弹框 */ // getBroswer().switchTo().alert().accept(); /** * 点击提示关闭按钮 */ clickByJs( waitVisibilityOfElementLocated(By.cssSelector("#warmTips #closeWarmTips"))); getBroswer().switchTo().defaultContent(); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#EM_PAGE"))); /** * 点击悬浮保全处理查询 */ new Actions(getBroswer()) .moveToElement( waitVisibilityOfElementLocated(By.xpath("//a[contains(text(),'保全处理查询')]"))).perform(); /** * 点击余额管理 */ clickByJs(waitVisibilityOfElementLocated(By.xpath("//a[contains(text(),'余额管理')]"))); getBroswer().switchTo().frame(getBroswer().findElement(By.cssSelector("#content"))); /** * 保单号 */ // String policyNo = "GP02002024242842"; /** * 输入保单号 */ waitVisibilityOfElementLocated(By.cssSelector("#queryPolNoT")).sendKeys(policyNo); /** * 点击查询 */ waitElementToBeClickable(By.cssSelector("[onclick*='queryPolInfoByPolNo()']")).click(); String beforeText = waitVisibilityOfElementLocated(By.xpath("//th[contains(text(),'保单号')]/parent::tr/following-sibling::tr")).getText(); String beforeMOney = RegexUtils.regexSingleMatch("(?<=\\s)\\d+\\.\\d+(?=\\s)", beforeText); Double beforeMOney1 = Double.parseDouble(beforeMOney); System.out.println(beforeText+" "+beforeMOney1); return beforeMOney1; } //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== public void yuEGuanLiBase() { } //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== //==================================================================================================================== /** * 判断弹框文本是否包含关键字 * @param key * @return 包含返回true,否则false */ private static boolean assertAlterContains(String key) { try { waitTime(3000); System.out.println(getBroswer().switchTo().alert().getText()); return getBroswer().switchTo().alert().getText().contains(key); } catch (Exception e) { return false; } } /** * 判断元素的属性值是否包含预期的属性值 * @param by * @param value * @param name * @return 包含返回true,不包含返回false */ public static boolean assertEleContains(By by,String value,String name) { try { return waitVisibilityOfElementLocated(by).getAttribute(name).contains(value); } catch (Exception e) { return false; } } /** * 判断元素的文本是否包含关键字 * @param by * @param key * @return 包含返回true,不包含返回false */ public static boolean assertEleContains(By by,String key) { try { return waitVisibilityOfElementLocated(by).getText().contains(key); } catch (Exception e) { return false; } } /** * 判断所有元素获取的文本是否包含指定关键字 * @param by * @param key * @return 包含返回true,不包含false */ private static boolean assertRowContains(By by,String key) { try { List<WebElement> list = waitVisibilityOfAllElementsLocatedBy(by); for (WebElement webElement : list) { if (webElement.getText().contains(key)) { return true; } } return false; } catch (Exception e) { return false; } } /** * 判断所有元素个数是否一个 * @param by * @param key * @return 是一个true,不是唯一返回false */ private static boolean assertInfoCountOne(By by) { try { List<WebElement> list = waitVisibilityOfAllElementsLocatedBy(by); if (list.size()==1) { return true; } return false; } catch (Exception e) { return false; } } /** * 判断所有元素个数是否大于等于一个 * @param by * @param key * @return 是一个true,不是唯一返回false */ private static boolean assertInfoCountBigOne(By by) { try { List<WebElement> list = waitVisibilityOfAllElementsLocatedBy(by); if (list.size()>=1) { return true; } return false; } catch (Exception e) { return false; } } /** * 根据获取的url来切换句柄 获取的标题包含预期的标题才能切换 * @param url 标题 */ public void switchWindowByCurrentUrl(String url) { Set<String> handles = getBroswer().getWindowHandles(); logger.info("获取【handles大小】为:【"+handles.size()+"】,【获取的handles】为:【"+handles.toString()+"】"); for (String handle : handles) { if (getBroswer().getCurrentUrl().contains(url)) { logger.info("当前句柄的【url】:【"+getBroswer().getCurrentUrl()+"】,符合预期的标题,切换成功"); break; }else { logger.info("当前句柄的【url】:【"+getBroswer().getCurrentUrl()+"】,切换句柄,寻找符合标题的句柄"); getBroswer().switchTo().window(handle); } } } /** * 等待单个元素存在在dom对象中,但不一定可见 * @param locator By 对象定位信息 * @return 返回存在dom 单个WebElement中元素,否则抛出异常 */ public static WebElement waitPresenceOfElementLocated(By locator) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,等待元素在dom中存在"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.presenceOfElementLocated(locator)).toString()+"】"); return getWait().until(ExpectedConditions.presenceOfElementLocated(locator)); } /** * 等待单个元素存在在dom对象中,但不一定可见 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 返回存在dom 单个WebElement中元素,否则抛出异常 */ public static WebElement waitPresenceOfElementLocated(String expectedPageKeyword,String expectedUIElementKeyword) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,等待元素在dom中存在"); By by = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【元素定位信息】为:【"+by.toString()+"】"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.presenceOfElementLocated(by)).toString()+""); return getWait().until(ExpectedConditions.presenceOfElementLocated(by)); } /** * 等待多个个元素存在在dom对象中,但不一定可见 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 返回存在dom 多个WebElement中元素-List<WebElement>,否则抛出异常 */ public static List<WebElement> waitPresenceOfAllElementsLocatedBy(String expectedPageKeyword,String expectedUIElementKeyword) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,等待元素们在dom中存在"); By by = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【元素定位信息】为:【"+by.toString()+"】"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.presenceOfAllElementsLocatedBy(by)).toString()+"】,其个数为【"+getWait().until(ExpectedConditions.presenceOfAllElementsLocatedBy(by)).size()+"】"); return getWait().until(ExpectedConditions.presenceOfAllElementsLocatedBy(by)); } /** * 等待多个个元素存在在dom对象中,但不一定可见 * @param locator By 对象定位信息 * @return 返回存在dom 多个WebElement中元素-List<WebElement>,否则抛出异常 */ public static List<WebElement> waitPresenceOfAllElementsLocatedBy(By locator) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,等待元素们在dom中存在"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.presenceOfAllElementsLocatedBy(locator)).toString()+"】,其个数为【"+getWait().until(ExpectedConditions.presenceOfAllElementsLocatedBy(locator)).size()+"】"); return getWait().until(ExpectedConditions.presenceOfAllElementsLocatedBy(locator)); } //=================== /** * 等待单个元素在页面可见 * @param locator By 对象定位信息 * @return 返回页面可见的 单个WebElement中元素,否则抛出异常 */ public static WebElement waitVisibilityOfElementLocated(By locator) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,等待元素在页面可见"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.visibilityOfElementLocated(locator)).toString()+"】"); return getWait().until(ExpectedConditions.visibilityOfElementLocated(locator)); } /** * 等待单个元素在页面可见 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 返回页面可见的 单个WebElement中元素,否则抛出异常 */ public static WebElement waitVisibilityOfElementLocated(String expectedPageKeyword,String expectedUIElementKeyword) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,等待元素在在页面可见"); By by = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【元素定位信息】为:【"+by.toString()+"】"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.visibilityOfElementLocated(by)).toString()+""); return getWait().until(ExpectedConditions.visibilityOfElementLocated(by)); } /** * 等待单个元素在页面可见 * @param element 需要等待的元素 * @return 返回页面可见的 单个WebElement中元素,否则抛出异常 */ public static WebElement waitVisibilityOfElementLocated(WebElement element) { logger.info("获取【元素】为:【"+element.toString()+"】,等待页面可见"); return getWait().until(ExpectedConditions.visibilityOf(element)); } /** * 等待多个个元素在页面可见 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 返回存在页面 多个WebElement中元素-List<WebElement>,否则抛出异常 */ public static List<WebElement> waitVisibilityOfAllElementsLocatedBy(String expectedPageKeyword,String expectedUIElementKeyword) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,等待元们素在页面可见"); By by = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【元素定位信息】为:【"+by.toString()+"】"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.visibilityOfAllElementsLocatedBy(by)).toString()+"】,其个数为【"+getWait().until(ExpectedConditions.visibilityOfAllElementsLocatedBy(by)).size()+"】"); return getWait().until(ExpectedConditions.visibilityOfAllElementsLocatedBy(by)); } /** * 等待多个个元素在页面可见 * @param locator By 对象定位信息 * @return 返回存在页面 多个WebElement中元素-List<WebElement>,否则抛出异常 */ public static List<WebElement> waitVisibilityOfAllElementsLocatedBy(By locator) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,等待元素们在页面可见"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.visibilityOfAllElementsLocatedBy(locator)).toString()+"】,其个数为【"+getWait().until(ExpectedConditions.visibilityOfAllElementsLocatedBy(locator)).size()+"】"); return getWait().until(ExpectedConditions.visibilityOfAllElementsLocatedBy(locator)); } /** * 等待多个个元素在页面可见 * @param locator By 对象定位信息 * @return 返回存在页面 多个WebElement中元素-List<WebElement>,否则抛出异常 */ public static List<WebElement> waitVisibilityOfAllElementsLocatedBy(WebElement ... elements) { logger.info("获取【locator定位信息】为:【"+elements.toString()+"】,等待元素们在页面可见"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.visibilityOfAllElements(elements)).toString()+"】,其个数为【"+getWait().until(ExpectedConditions.visibilityOfAllElements(elements)).size()+"】"); return getWait().until(ExpectedConditions.visibilityOfAllElements(elements)); } /** * 等待单个元素可被点击 * @param locator By 对象定位信息 * @return 返回页面可点击单个WebElement中元素,否则抛出异常 */ public static WebElement waitElementToBeClickable(By locator) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,等待元素可被点击"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.elementToBeClickable(locator)).toString()+"】"); return getWait().until(ExpectedConditions.elementToBeClickable(locator)); } /** * 等待单个元素可被点击 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 返回页面可点击单个WebElement中元素,否则抛出异常 */ public static WebElement waitElementToBeClickable(String expectedPageKeyword,String expectedUIElementKeyword) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,等待元素可被点击"); By by = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【元素定位信息】为:【"+by.toString()+"】"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.elementToBeClickable(by)).toString()+""); return getWait().until(ExpectedConditions.elementToBeClickable(by)); } /** * 等待单个元素可被点击 * @param element 需要等待的元素 * @return 返回页面可点击单个WebElement中元素,否则抛出异常 */ public static WebElement waitElementToBeClickable(WebElement element) { logger.info("获取【元素】为:【"+element.toString()+"】,等待元素可被点击"); return getWait().until(ExpectedConditions.elementToBeClickable(element)); } /** * 等待Frame可以跳转并跳转进去 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 返回webDriver实例 */ public static WebDriver waitFrameToBeAvailableAndSwitchToIt(String expectedPageKeyword,String expectedUIElementKeyword) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,等待Frame可以跳转并跳转进去"); By by = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【元素定位信息】为:【"+by.toString()+"】"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(by)).toString()+""); return getWait().until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(by)); } /** * 等待Frame可以跳转并跳转进去 * @param element 需要等待的元素 * @return 返回webDriver实例 */ public static WebDriver waitFrameToBeAvailableAndSwitchToIt(WebElement element) { logger.info("获取【元素】为:【"+element.toString()+"】,等待Frame可以跳转并跳转进去"); return getWait().until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(element)); } /** * 等待Frame可以跳转并跳转进去 * @param frameLocator (id or name) * @return 返回webDriver实例 */ public static WebDriver waitFrameToBeAvailableAndSwitchToIt(String frameLocator) { logger.info("获取【frame (id or name)】为:【"+frameLocator+"】,等待Frame可以跳转并跳转进去"); return getWait().until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameLocator)); } /** * 等待Frame可以跳转并跳转进去 * @param frameLocator index * @return 返回webDriver实例 */ public static WebDriver waitFrameToBeAvailableAndSwitchToIt(int frameLocator) { logger.info("获取【frame (index)】为:【"+frameLocator+"】,等待Frame可以跳转并跳转进去"); return getWait().until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameLocator)); } /** * 等待Frame可以跳转并跳转进去 * @param locator By 对象定位信息 * @return 返回webDriver实例 */ public static WebDriver waitFrameToBeAvailableAndSwitchToIt(By locator) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,等待Frame可以跳转并跳转进去"); logger.info("返回的元素有【"+ getWait().until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(locator)).toString()+"】"); return getWait().until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(locator)); } /** * 点击某个元素 * @param locator By定位对象 */ public static void click(By locator ) { try { logger.info("点击了等待可以点击的元素,其定位信息【"+locator.toString()+"】"); waitElementToBeClickable(locator).click(); } catch (Exception e) { try { logger.info("点击了等待可以点击的元素失败,通过js点击,其定位信息【"+locator.toString()+"】"); clickByJs(waitPresenceOfElementLocated(locator)); } catch (Exception e2) { e.printStackTrace(); } } } /** * 点击某个元素 * @param element 元素对象 */ public static void click(WebElement element ) { try { logger.info("点击了等待可以点击的元素,其元素信息【"+element.toString()+"】"); waitElementToBeClickable(element).click(); } catch (Exception e) { try { logger.info("点击了等待可以点击的元素失败,通过js点击,其元素信息【"+element.toString()+"】"); clickByJs(element); } catch (Exception e2) { e.printStackTrace(); } } } /** * 点击某个元素 * @param expectedPageKeyword 预期页面 * @param expectedUIElementKeyword 预期关键字 */ public static void click(String expectedPageKeyword,String expectedUIElementKeyword ) { try { logger.info("点击了【关键页面】:【"+expectedPageKeyword+"】【关键元素】:【"+expectedUIElementKeyword+"】"); waitElementToBeClickable(expectedPageKeyword, expectedUIElementKeyword).click(); } catch (Exception e) { try { logger.info("点击了【关键页面】:【"+expectedPageKeyword+"】【关键元素】:【"+expectedUIElementKeyword+"】失败,现通过js点击"); clickByJs(waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword)); } catch (Exception e2) { e.printStackTrace(); } } } /** * 输入信息 * @param locator By定位对象 * @param keysToSend 输入的值 */ public static void input(By locator,String keysToSend) { try { logger.info("对dom存在的元素进行输入,其定位信息【"+locator.toString()+"】,【输入的内容】为:【"+keysToSend+"】"); waitPresenceOfElementLocated(locator).sendKeys(keysToSend); if (!checkTextToBePresentInElementValue(locator, keysToSend)) { logger.info("对dom存在的元素进行输入,输入的信息和value值不一致,通过js直接改变value值,其定位信息【"+locator.toString()+"】,【输入的内容】为:【"+keysToSend+"】"); modifyValueByJs(waitVisibilityOfElementLocated(locator), keysToSend); } } catch (Exception e) { e.printStackTrace(); } } /** * 输入信息 * @param element 元素对象 * @param keysToSend 输入的值 */ public static void input(WebElement element,String keysToSend ) { try { logger.info("对dom存在的元素进行输入,其定位信息【"+element.toString()+"】,【输入的内容】为:【"+keysToSend+"】"); element.sendKeys(keysToSend); if (!checkTextToBePresentInElementValue(element, keysToSend)) { logger.info("对dom存在的元素进行输入,输入的信息和value值不一致,通过js直接改变value值,其定位信息【"+element.toString()+"】,【输入的内容】为:【"+keysToSend+"】"); modifyValueByJs(element, keysToSend); } } catch (Exception e) { e.printStackTrace(); } } /** * 点击某个元素 * @param expectedPageKeyword 预期页面 * @param expectedUIElementKeyword 预期关键字 * @param keysToSend 输入的值 */ public static void input(String expectedPageKeyword,String expectedUIElementKeyword,String keysToSend ) { try { logger.info("向【关键页面】:【"+expectedPageKeyword+"】【关键元素】:【"+expectedUIElementKeyword+"】输入【 "+keysToSend+"】"); waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword).sendKeys(keysToSend); if (!checkTextToBePresentInElementValue(waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword), keysToSend)) { logger.info("对dom存在的元素进行输入,输入的信息和value值不一致,通过js直接改变value值,其关键页面【"+expectedPageKeyword+"】,【关键元素】:【"+ expectedUIElementKeyword+"】,【输入的内容】为:【"+keysToSend+"】"); modifyValueByJs(waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword), keysToSend); } }catch (Exception e) { e.printStackTrace(); } } /** * 取消选择所有select * @param locator By 对象定位信息 */ public static void deselectAll(By locator) { logger.info("取消所有的select选项,select定位是:【"+locator.toString()+"】"); Select select = new Select(waitPresenceOfElementLocated(locator)); select.deselectAll(); } /** * 取消选择所有select * @param element WebElement对象 */ public static void deselectAll(WebElement element) { logger.info("取消所有的select选项,select定位是:【"+element.toString()+"】"); Select select = new Select(element); select.deselectAll(); } /** * 取消选择所有select * @param expectedPageKeyword 预期页面 * @param expectedUIElementKeyword 预期关键字 */ public static void deselectAll(String expectedPageKeyword,String expectedUIElementKeyword) { logger.info("取消所有的select选项"); Select select = new Select(waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword)); select.deselectAll(); } /** * 通过索引来选择select * @param locator By 对象定位信息 * @param index 索引 */ public static void selectByIndex(By locator,int index) { logger.info("通过索引来选择select,select定位是:【"+locator.toString()+"】,【索引值】:【"+index+"】"); Select select = new Select(waitPresenceOfElementLocated(locator)); select.selectByIndex(index); } /** * 通过索引来选择select * @param element WebElement对象 * @param index 索引 */ public static void selectByIndex(WebElement element,int index) { logger.info("通过索引来选择select,select定位是:【"+element.toString()+"】,【索引值】:【"+index+"】"); Select select = new Select(element); select.selectByIndex(index); } /** * 通过索引值来选择select * @param expectedPageKeyword 预期页面 * @param expectedUIElementKeyword 预期关键字 * @param index 索引值 */ public static void selectByIndex(String expectedPageKeyword,String expectedUIElementKeyword,int index) { logger.info("通过索引值来选择select,select所在关键页面是:【"+expectedPageKeyword+"】,所在关键元素是【"+expectedUIElementKeyword+"】,【索引值】:【"+index+"】"); Select select = new Select(waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword)); select.selectByIndex(index); } /** * 通过value值来选择select * @param locator By 对象定位信息 * @param value value值 */ public static void selectByValue(By locator,String value) { logger.info("通过value值来选择select,select定位是:【"+locator.toString()+"】,【value值值】:【"+value+"】"); Select select = new Select(waitPresenceOfElementLocated(locator)); select.selectByValue(value); } /** * 通过value值来选择select * @param element WebElement对象 * @param value value值 */ public static void selectByValue(WebElement element,String value) { logger.info("通过value值来选择select,select定位是:【"+element.toString()+"】,【value值值】:【"+value+"】"); Select select = new Select(element); select.selectByValue(value); } /** * 通过value值来选择select * @param expectedPageKeyword 预期页面 * @param expectedUIElementKeyword 预期关键字 * @param value value值 */ public static void selectByValue(String expectedPageKeyword,String expectedUIElementKeyword,String value) { logger.info("通过value值来选择select,select所在关键页面是:【"+expectedPageKeyword+"】,所在关键元素是【"+expectedUIElementKeyword+"】,【value值值】:【"+value+"】"); Select select = new Select(waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword)); select.selectByValue(value); } // /** * 通过可见文本值来选择select * @param locator By 对象定位信息 * @param text 可见文本值 */ public static void selectByVisibleText(By locator,String text) { logger.info("通过可见文本值来选择select,select定位是:【"+locator.toString()+"】,【可见文本值】:【"+text+"】"); Select select = new Select(waitPresenceOfElementLocated(locator)); select.selectByVisibleText(text); } /** * 通过可见文本值来选择select * @param element WebElement对象 * @param text 可见文本值 */ public static void selectByVisibleText(WebElement element,String text) { logger.info("通过可见文本值来选择select,select定位是:【"+element.toString()+"】,【可见文本值】:【"+text+"】"); Select select = new Select(element); select.selectByVisibleText(text); } /** * 通过可见文本值来选择select * @param expectedPageKeyword 预期页面 * @param expectedUIElementKeyword 预期关键字 * @param text 可见文本值 */ public static void selectByVisibleText(String expectedPageKeyword,String expectedUIElementKeyword,String text) { logger.info("通过可见文本值来选择select,select所在关键页面是:【"+expectedPageKeyword+"】,所在关键元素是【"+expectedUIElementKeyword+"】,【可见文本值】:【"+text+"】"); Select select = new Select(waitPresenceOfElementLocated(expectedPageKeyword, expectedUIElementKeyword)); select.selectByVisibleText(text); } /** * 确认alter弹框 */ public static void acceptAlert() { logger.info("确认alter弹框"); Alert alert = getBroswer().switchTo().alert(); alert.accept(); } /** * 关闭浏览器 */ public static void closeBrowser() { logger.info("关闭浏览器"); getBroswer().quit(); } /** * 取消alter弹框 */ public static void dismissAlert() { logger.info("取消alter弹框"); Alert alert = getBroswer().switchTo().alert(); alert.dismiss(); } /** * 检查给定元素是否被选中的期望值。 * @param locator By 对象定位信息 * @param selected 预期的选中状态 * @return 返回true,实际选中状态和预期选中状态一致,反之返回false */ public static Boolean checkElementSelectionStateToBe(By locator,boolean selected) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,检查select是否被选中,【预期选中状态】:【"+selected+"】"); logger.info("返回的实际选中状态【"+ getWait().until(ExpectedConditions.elementSelectionStateToBe(locator, selected))+"】"); return getWait().until(ExpectedConditions.elementSelectionStateToBe(locator, selected)); } /** * 检查给定元素是否被选中的期望值。 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 返回true,实际选中状态和预期选中状态一致,反之返回false */ public static Boolean checkElementSelectionStateToBe(String expectedPageKeyword,String expectedUIElementKeyword,boolean selected ) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,检查select是否被选中"); By locator = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,检查select是否被选中"); logger.info("返回的实际选中状态【"+ getWait().until(ExpectedConditions.elementSelectionStateToBe(locator, selected))+"】"); return getWait().until(ExpectedConditions.elementSelectionStateToBe(locator, selected)); } /** * 检查给定元素是否被选中的期望值。 * @param element 需要判断的元素 * @param selected 预期的选中状态 * @return 返回true,实际选中状态和预期选中状态一致,反之返回false */ public static Boolean checkElementSelectionStateToBe(WebElement element,boolean selected) { logger.info("获取【element元素信息】为:【"+element.toString()+"】,检查select是否被选中,【预期选中状态】:【"+selected+"】"); logger.info("返回的实际选中状态【"+ getWait().until(ExpectedConditions.elementSelectionStateToBe(element, selected))+"】"); return getWait().until(ExpectedConditions.elementSelectionStateToBe(element, selected)); } /** * 检查给定元素是否被选中。 * @param locator By 对象定位信息 * @return 已选择返回true,反之返回false */ public static Boolean checkElementToBeSelected(By locator) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,检查select被选中"); logger.info("返回的实际选中状态【"+ getWait().until(ExpectedConditions.elementToBeSelected(locator))+"】"); return getWait().until(ExpectedConditions.elementToBeSelected(locator)); } /** * 检查给定元素是否被选中。 * @param element 需要判断的元素 * @param selected 预期的选中状态 * @return 已选择返回true,反之返回false */ public static Boolean checkElementToBeSelected(WebElement element) { logger.info("获取【element元素信息】为:【"+element.toString()+"】,检查select被选中"); logger.info("返回的实际选中状态【"+ getWait().until(ExpectedConditions.elementToBeSelected(element))+"】"); return getWait().until(ExpectedConditions.elementToBeSelected(element)); } /** * 检查给定元素是否被选中。 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @return 已选择返回true,反之返回false */ public static Boolean checkElementToBeSelected(String expectedPageKeyword,String expectedUIElementKeyword ) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,检查select被选中"); By locator = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,检查select被选中"); logger.info("返回的实际选中状态【"+ getWait().until(ExpectedConditions.elementToBeSelected(locator))+"】"); return getWait().until(ExpectedConditions.elementToBeSelected(locator)); } /** * 获取指定元素的实际文本,是否【等于】预期的文本值 * @param locator By 对象定位信息 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkTextToBe(By locator,String value) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,预期的文本值【"+value+"】,获取指定元素的实际文本,是否【等于】预期的文本值"); logger.info("获取【实际文本值】为:【"+waitPresenceOfElementLocated(locator).getText()+"】"); logger.info("返回的文本与预期的文本是否相等状态:【"+ getWait().until(ExpectedConditions.textToBe(locator,value ))+"】"); return getWait().until(ExpectedConditions.textToBe(locator, value)); } /** * 获取指定元素的实际文本,是否【等于】预期的文本值 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkTextToBe(String expectedPageKeyword,String expectedUIElementKeyword,String value) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,获取指定元素的实际文本,是否【等于】预期的文本值"); By locator = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,获取指定元素的实际文本,是否等于预期的文本值"); logger.info("获取【实际文本值】为:【"+waitPresenceOfElementLocated(locator).getText()+"】"); logger.info("返回的文本与预期的文本是否相等状态:【"+ getWait().until(ExpectedConditions.textToBe(locator,value ))+"】"); return getWait().until(ExpectedConditions.textToBe(locator, value)); } /** * 获取指定元素的实际文本,是否【包含】预期的文本值 * @param locator By 对象定位信息 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkTextToBePresentInElementLocated(By locator,String value) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,预期的文本值【"+value+"】,,获取指定元素的实际文本,是否【包含】预期的文本值"); logger.info("获取【实际文本值】为:【"+waitPresenceOfElementLocated(locator).getText()+"】"); logger.info("返回的文本与预期的文本是否【相等】状态:【"+ getWait().until(ExpectedConditions.textToBePresentInElementLocated(locator, value))+"】"); return getWait().until(ExpectedConditions.textToBePresentInElementLocated(locator, value)); } /** * 获取指定元素的实际文本,是否【包含】预期的文本值 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkTextToBePresentInElementLocated(String expectedPageKeyword,String expectedUIElementKeyword,String value) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,获取指定元素的实际文本,是否【包含】等于预期的文本值"); By locator = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,获取指定元素的实际文本,是否【包含】等于预期的文本值"); logger.info("获取【实际文本值】为:【"+waitPresenceOfElementLocated(locator).getText()+"】"); logger.info("返回的文本与预期的文本是否【包含】状态:【"+ getWait().until(ExpectedConditions.textToBePresentInElementLocated(locator,value ))+"】"); return getWait().until(ExpectedConditions.textToBePresentInElementLocated(locator, value)); } /** * 获取指定元素的实际文本,是否【包含】预期的文本值 * @param element 指定元素 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkTextToBePresentInElementLocated(WebElement element,String value) { logger.info("获取【element元素信息】为:【"+element.toString()+"】,预期的文本值【"+value+"】,获取指定元素的实际文本值获取指定元素的实际文本,是否【包含】等于预期的文本值"); logger.info("获取【实际文本值】为:【"+element.getText()+"】"); logger.info("返回的文本与预期的文本是否【包含】状态:【"+ getWait().until(ExpectedConditions.textToBePresentInElement(element, value))+"】"); return getWait().until(ExpectedConditions.textToBePresentInElement(element, value)); } /** * 获取指定元素的实际value属性值,是否【包含】预期的value属性值 * @param element 指定元素 * @param value 预期value * @return 等于返回true,反之返回false */ public static Boolean checkTextToBePresentInElementValue(WebElement element,String value) { logger.info("获取【element元素信息】为:【"+element.toString()+"】,预期的value值【"+value+"】,获取指定元素的实际value值获取指定元素的实际文本,是否【包含】等于预期的value值"); logger.info("获取【实际value值】为:【"+element.getAttribute("value")+"】"); logger.info("返回的文本与预期的文本是否【包含】状态:【"+ getWait().until(ExpectedConditions.textToBePresentInElementValue(element, value))+"】"); return getWait().until(ExpectedConditions.textToBePresentInElementValue(element, value)); } /** * 获取指定元素的实际value属性值,是否【包含】预期的value属性值 * @param locator By 对象定位信息 * @param value 预期value值 * @return 等于返回true,反之返回false */ public static Boolean checkTextToBePresentInElementValue(By locator,String value) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,预期的文本值【"+value+"】,获取指定元素的实际value值,获取指定元素的实际value属性值,是否【包含】等于预期的value属性值"); logger.info("获取【实际value值】为:【"+waitPresenceOfElementLocated(locator).getAttribute("value")+"】"); logger.info("返回的实际value值与预期的value值是否【包含】状态:【"+ getWait().until(ExpectedConditions.textToBePresentInElementValue(locator, value))+"】"); return getWait().until(ExpectedConditions.textToBePresentInElementValue(locator, value)); } /** * 获取指定元素的实际value属性值,是否【包含】预期的value属性值 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkTextToBePresentInElementValue(String expectedPageKeyword,String expectedUIElementKeyword,String value) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,【预期的属性值】:【"+value+"】获取指定元素的实际value属性值,是否【包含】等于预期的value属性值"); By locator = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,获取指定元素的实际value属性值,是否【包含】等于预期的value属性值"); logger.info("获取【实际value值】为:【"+waitPresenceOfElementLocated(locator).getAttribute("value")+"】"); logger.info("返回的实际value值与预期的value值是否【包含】状态:【"+ getWait().until(ExpectedConditions.textToBePresentInElementValue(locator,value ))+"】"); return getWait().until(ExpectedConditions.textToBePresentInElementValue(locator, value)); } /** * 获取指定元素的实际属性,是否【包含】预期的属性值 * @param element 指定元素 * @param attribute 指定属性名 * @param value 预期value * @return 等于返回true,反之返回false */ public static Boolean checkAttributeContains(WebElement element,String attribute,String value) { logger.info("获取【element元素信息】为:【"+element.toString()+"】,指定的【属性名】:【"+attribute+"】,【预期的属性值】:"+value+",获取指定元素的实际属性是否【包含】等于预期的属性值"); logger.info("获取【实际属性值】为:【"+element.getAttribute(attribute)+"】"); logger.info("返回的文本与预期的文本是否【包含】状态:【"+ getWait().until(ExpectedConditions.attributeContains(element, attribute, value))+"】"); return getWait().until(ExpectedConditions.attributeContains(element, attribute, value)); } /** * 检查alter弹框是否存在 * @return true存在,false不存在 */ public boolean checkAlertIsPresent() { try { logger.info("开始检查alter是否存在"); getWait().until(ExpectedConditions.alertIsPresent()); logger.info("开始检查alter存在"); return true; }catch (Exception e) { logger.info("开始检查alter不存在"); return false; } } /** * 检查页面元素是否可见 * @param locator * @return 如果返回为true,页面不可见或者元素不再dom中,返回false,页面可见 */ public static boolean checkInvisibilityOfElementLocated(By locator) { logger.info("检查元素是否不可见或页面不存在,【元素信息】:【"+locator.toString()+"】"); logger.info("检查元素是否不可见或页面的状态:【"+getWait().until(ExpectedConditions.invisibilityOfElementLocated(locator))+"】"); return getWait().until(ExpectedConditions.invisibilityOfElementLocated(locator)); } /** * 获取指定元素的实际属性,是否【包含】预期的属性值 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @param attribute 指定属性名 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkAttributeContains(String expectedPageKeyword,String expectedUIElementKeyword,String attribute,String value) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,指定的【属性名】:【"+attribute+"】,【预期的属性值】:"+value+",获取指定元素的实际属性是否【包含】等于预期的属性值"); By locator = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,获取指定元素的实际属性值,是否【包含】等于预期的属性值"); logger.info("获取【实际属性值】为:【"+waitPresenceOfElementLocated(locator).getAttribute(attribute)+"】"); logger.info("返回的实际属性值与预期的属性值是否【包含】状态:【"+ getWait().until(ExpectedConditions.attributeContains(locator, attribute, value))+"】"); return getWait().until(ExpectedConditions.attributeContains(locator, attribute, value)); } /** * 获取指定元素的实际属性,是否【包含】预期的属性值 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @param attribute 指定属性名 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkAttributeContains(By locator,String attribute,String value) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,【指定的属性名】:【"+attribute+"】,【指定的预期属性值】:【"+value+"】,获取指定元素的实际属性值,是否【包含】等于预期的属性值"); logger.info("获取【实际属性值】为:【"+waitPresenceOfElementLocated(locator).getAttribute(attribute)+"】"); logger.info("返回的实际属性值与预期的属性值是否【包含】状态:【"+ getWait().until(ExpectedConditions.attributeContains(locator, attribute, value))+"】"); return getWait().until(ExpectedConditions.attributeContains(locator, attribute, value)); } /** * 获取指定元素的实际属性,是否【等于】预期的属性值 * @param element 指定元素 * @param attribute 指定属性名 * @param value 预期value * @return 等于返回true,反之返回false */ public static Boolean checkAttributeToBe(WebElement element,String attribute,String value) { logger.info("获取【element元素信息】为:【"+element.toString()+"】,指定的【属性名】:【"+attribute+"】,【预期的属性值】:"+value+",获取指定元素的实际属性是否【等于】等于预期的属性值"); logger.info("获取【实际属性值】为:【"+element.getAttribute(attribute)+"】"); logger.info("返回的文本与预期的文本是否【等于】状态:【"+ getWait().until(ExpectedConditions.attributeToBe(element, attribute, value))+"】"); return getWait().until(ExpectedConditions.attributeToBe(element, attribute, value)); } /** * 获取指定元素的实际属性,是否【等于】预期的属性值 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @param attribute 指定属性名 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkAttributeToBe(String expectedPageKeyword,String expectedUIElementKeyword,String attribute,String value) { logger.info("获取【页面关键字】为:【"+expectedPageKeyword+"】,获取【元素关键字】为:【"+expectedUIElementKeyword+"】,指定的【属性名】:【"+attribute+"】,【预期的属性值】:"+value+",获取指定元素的实际属性是否【等于】等于预期的属性值"); By locator = getXmlBy(expectedPageKeyword, expectedUIElementKeyword); logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,获取指定元素的实际属性值,是否【等于】等于预期的属性值"); logger.info("获取【实际属性值】为:【"+waitPresenceOfElementLocated(locator).getAttribute(attribute)+"】"); logger.info("返回的实际属性值与预期的属性值是否【等于】状态:【"+ getWait().until(ExpectedConditions.attributeToBe(locator, attribute, value))+"】"); return getWait().until(ExpectedConditions.attributeToBe(locator, attribute, value)); } /** * 获取指定元素的实际属性,是否【等于】预期的属性值 * @param expectedPageKeyword 预期页面关键在 * @param expectedUIElementKeyword 预期元素关键字 * @param attribute 指定属性名 * @param value 预期的文本值 * @return 等于返回true,反之返回false */ public static Boolean checkAttributeToBe(By locator,String attribute,String value) { logger.info("获取【locator定位信息】为:【"+locator.toString()+"】,【指定的属性名】:【"+attribute+"】,【指定的预期属性值】:【"+value+"】,获取指定元素的实际属性值,是否【等于】等于预期的属性值"); logger.info("获取【实际属性值】为:【"+waitPresenceOfElementLocated(locator).getAttribute(attribute)+"】"); logger.info("返回的实际属性值与预期的属性值是否【等于】状态:【"+ getWait().until(ExpectedConditions.attributeToBe(locator, attribute, value))+"】"); return getWait().until(ExpectedConditions.attributeToBe(locator, attribute, value)); } // public void test() throws InterruptedException { // //把“随意拖拽1-1”元素移动到“随意拖拽1-2”节点下去 // WebElement webElement1 = BrowserUtil.driver.findElement(By.id("treeDemo_2_span")); // WebElement webElement2= BrowserUtil.driver.findElement(By.id("treeDemo_3_span")); // //构建鼠标的一连串动作 // Actions actions = new Actions(BrowserUtil.driver); // actions.clickAndHold(webElement1).moveToElement(webElement2).release().build().perform(); // } public static By getXmlBy(String path ,String expectedPageKeyword,String expectedUIElementKeyword) { try { String uiElementBy = ""; String uiElementValue = ""; for(Page page:XmlUtils.loadXml(path)) { String actualPageKeyword = page.getKeyword(); if (expectedPageKeyword.equals(actualPageKeyword)) { for (UIElement uiElement : page.getUiElementList()) { String actualUiElement = uiElement.getKeyword(); if (expectedUIElementKeyword.equals(actualUiElement)) { uiElementBy = uiElement.getBy(); uiElementValue = uiElement.getValue(); } } } } Class<By> clazz = By.class; Method method = clazz.getMethod(uiElementBy, String.class); By by =(By) method.invoke(null, uiElementValue); return by;}catch (Exception e) { e.printStackTrace(); } return null; } public static By getXmlBy(String expectedPageKeyword,String expectedUIElementKeyword) { try { String uiElementBy = ""; String uiElementValue = ""; for(Page page:XmlUtils.loadXml("")) { String actualPageKeyword = page.getKeyword(); if (expectedPageKeyword.equals(actualPageKeyword)) { for (UIElement uiElement : page.getUiElementList()) { String actualUiElement = uiElement.getKeyword(); if (expectedUIElementKeyword.equals(actualUiElement)) { uiElementBy = uiElement.getBy(); uiElementValue = uiElement.getValue(); } } } } Class<By> clazz = By.class; Method method = clazz.getMethod(uiElementBy, String.class); By by =(By) method.invoke(null, uiElementValue); return by; }catch (Exception e) { e.printStackTrace(); } return null; } //=======================================Js部分========================================================= /** * Selenium定位的元素被图层遮挡,click无法操作,可以用此方法点击 * @param webElement 需要操作的元素 */ public static void clickByJs(WebElement webElement) { logger.info(webElement.toString()); getJs().executeScript("arguments[0].click();", webElement); } /** * 去除元素只读属性 * @param webElement 需要操作的元素 */ public static void removeAttributeReadonly(WebElement webElement) { getJs().executeScript("arguments[0].removeAttribute('readonly')",webElement); } /** * 文本输入框赋值 * @param webElement 需要操作的元素 * @param input 期望输入的值 * 注意: JS企图去控制输入框的值失效,是因为没有触发input或change事件(有些前端会设置) */ public static void modifyValueByJs(WebElement webElement,String input) { getJs().executeScript("arguments[0].value=arguments[1]",webElement,input); } /** * 设置富文本框的内容 * @param webElement 需要操作的元素 * @param input 期望输入的值 */ public static void modifyInnerHTMLByJs(WebElement webElement,String input) { getJs().executeScript("arguments[0].innerHTML = arguments[1]" ,webElement,input); } /** * 利用js代码取出关键字 * @param webElement 需要操作的元素 * @return 返回获取的value值 */ public static String getValueByJs(WebElement webElement) { return (String) getJs().executeScript("var result=arguments[0].value;return result",webElement); } /** * 用js判断页面加载完毕,返回complete * @return 返回complete */ public static String judgeLoadComplete() { return getJs().executeScript("return document.readyState").toString(); } /** * 获取富文本框内容 * @param webElement 需要操作的元素 * @return 返回获取的innerHTML */ public static String getInnerHTMLByJs(WebElement webElement) { return (String) getJs().executeScript("var result=arguments[0].innerHTML;return result" ,webElement); } /** * 滑动页面到指定元素的顶部对其 * @param webElement 需要操作的元素 */ public static void scrollIntoTopView(WebElement webElement) { getJs().executeScript("arguments[0].scrollIntoView(true);",webElement); } /** * 滑动页面到指定元素的顶部底部 * @param webElement 需要操作的元素 */ public static void scrollInTobottomView(WebElement webElement) { getJs().executeScript("arguments[0].scrollIntoView(false);",webElement); } /** * 元素滚动至可见位置_如果当前可见,则不会发生滚动 * @param webElement 需要操作的元素 */ public static void scrollIntoViewIfNeeded(WebElement webElement) { getJs().executeScript("arguments[0].scrollIntoViewIfNeeded(true);",webElement); } /** * 封装设置或者新增页面对象的属性值的方法 调用JS代码修改页面元素的属性值,arguments[0]~arguments[1]分别 * 会用后面的element,attributeName和value参数进行替换 * @param webElement 需要操作的元素 * @param attributeName 属性名 * @param attributeValue 属性值 */ public static void setAttribute(WebElement webElement,String attributeName,String attributeValue) { getJs().executeScript("arguments[0].setAttribute(\""+attributeName+"\",\""+attributeValue+"\")",webElement,attributeName,attributeValue); } /** * 删除元素指定元素属性 * @param webElement 需要操作的元素 * @param attributeName 属性名 */ public static void removeAttribute(WebElement webElement,String attributeName) { getJs().executeScript("arguments[0].removeAttribute(arguments[1])",webElement,attributeName); } /** * 获取指定元素对应的属性值 * @param webElement 需要操作的元素 * @param attributeName 属性名 * @return 返回指定元素对应的属性值 */ public static String getAttribute(WebElement webElement,String attributeName) { logger.info("浏览器信息和获取的元素信息:【"+webElement.toString()+"】,获取该元素属性名为【"+attributeName+"】,属性值值为【"+(String)getJs().executeScript("return arguments[0].getAttribute(arguments[1])",webElement,attributeName)+"】"); return (String)getJs().executeScript("return arguments[0].getAttribute(arguments[1])",webElement,attributeName); } /** * 元素高亮展示 #边框border:2px; blue红色 * @param webElement 需要操作的元素 */ public static void setHighLight(WebElement webElement) { logger.info("浏览器信息和获取的元素信息:【"+webElement.toString()+"】,设置了【style】属性,其属性值为【border: 10px solid blue;】,其目的是高亮显示元素"); setAttribute(webElement, "style", "border: 10px solid blue;"); } //=======================================正则表达式替换修改xml部分=========================================== /** * 替换${格式的信息} * @param expectedPageKeyword * @param expectedUIElementKeyword * @param modifyValue */ public static void replaceValue(String expectedPageKeyword,String expectedUIElementKeyword,String modifyValue) { // XmlUtils.(expectedPageKeyword, expectedUIElementKeyword, modifyValue, "\\$\\{.+\\}"); } /** * 替换中文字符为S{XXX} * @param expectedPageKeyword * @param expectedUIElementKeyword * @param modifyValue */ public static void replaceChinese(String expectedPageKeyword,String expectedUIElementKeyword,String modifyValue) { // XmlUtil.modifyXmlInfo(expectedPageKeyword, expectedUIElementKeyword, modifyValue, "[\\x{4e00}-\\x{9fa5}]+"); } //机动车综合险2020版 /** * 将中文字符替换为 S{XXX} * @param expectedPageKeyword * @param expectedUIElementKeyword * @param modifyValue */ public static void replaceChineseNum(String expectedPageKeyword,String expectedUIElementKeyword,String modifyValue) { // XmlUtil.modifyXmlInfo(expectedPageKeyword, expectedUIElementKeyword, modifyValue, "[0-9\\x{4e00}-\\x{9fa5}]+"); } /** * 匹配中文和带-的 * @param expectedPageKeyword * @param expectedUIElementKeyword * @param modifyValue */ public static void replaceChineseNum1(String expectedPageKeyword,String expectedUIElementKeyword,String modifyValue) { // XmlUtil.modifyXmlInfo(expectedPageKeyword, expectedUIElementKeyword, modifyValue, "[\\\\-\\x{4e00}-\\x{9fa5}]+"); } }