Index: ssts-web/src/test/java/test/forgon/disinfectsystem/selenium/apply/helper/ApplyActionHelper.java =================================================================== diff -u -r18900 -r19407 --- ssts-web/src/test/java/test/forgon/disinfectsystem/selenium/apply/helper/ApplyActionHelper.java (.../ApplyActionHelper.java) (revision 18900) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/selenium/apply/helper/ApplyActionHelper.java (.../ApplyActionHelper.java) (revision 19407) @@ -117,28 +117,26 @@ */ private static void handleCancelWindow(String cancelBtnId) { + // 获得当前窗口 + String mainWindow = Utils.driver.getWindowHandle(); + // 直接调用webElement的click,避免js打开模态窗口后代码阻塞的问题 Utils.retryingFindAndClickBySeleniumAPI(By.id(cancelBtnId)); - // 这里要稍微等一下,等模态窗出来 - Utils.doWait(200); - // 获得当前窗口 - String mainWindow = Utils.driver.getWindowHandle(); + Utils.waitForWindowAmountEquals(2, 15000); + // 获取所有窗口 Set handles = Utils.driver.getWindowHandles(); - // 断言窗口的数量只有2,当前窗口和模态窗口 - logger.info("模态窗口窗口数量:{}", handles.size()); - assertEquals(handles.size(), 2); // 删除当前窗口 handles.remove(mainWindow); for (String windowHandle : handles) { - Utils.switchToWindow(windowHandle); + Utils.driver.switchTo().window(windowHandle); logger.info("切换到模态窗口:{}成功", windowHandle); } Utils.retryingFindAndClick(By.id("other")); - Utils.findByAwaitAndSend(By.id("tem"), "其他终止原因"); + Utils.retryingFindAndSendKeys(By.id("tem"), "其他终止原因"); Utils.retryingFindAndClick(By.id("confirm")); - Utils.switchToWindow(mainWindow); + Utils.driver.switchTo().window(mainWindow); ApplyHelper.waitSubmit(); } @@ -190,7 +188,7 @@ script += " var cc = getSerialNo('a', 'formDetail');cc.click();"; Utils.runJavaScript(script); // Utils.retryingFindAndClick(By.className("formDetail")); - Utils.switchToWindow(Utils.driver.getWindowHandle()); + Utils.driver.switchTo().window(Utils.driver.getWindowHandle()); JSWaiter.waitUntilJQueryReady(); logger.info("打开第一行成功"); } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/selenium/tools/Utils.java =================================================================== diff -u -r19363 -r19407 --- ssts-web/src/test/java/test/forgon/disinfectsystem/selenium/tools/Utils.java (.../Utils.java) (revision 19363) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/selenium/tools/Utils.java (.../Utils.java) (revision 19407) @@ -539,8 +539,9 @@ } /** - * 查找组合框,输入按键。输入按键后休眠1.5秒,等待下拉框的内容出现,保证可靠的输入值。 - * TODO:如果找到更可靠输入组合框内容的方法,可以取消休眠。如果需要更可靠的输入,可以延长休眠时间 + * 查找组合框,输入按键。 + * 说明:之前输入按键后,会休眠1.5秒,等待下拉框的内容出现,保证可靠的输入值。 + * 后面采用了JSWaiter的waitUntilJQueryReady方法,取消了休眠。 * * @param by * @param keys @@ -555,11 +556,6 @@ element = fluentWaitUntilFind(by); element.sendKeys(keys); - - // TODO:下面的sleep代码,要改为判断Ext.store是否加载完成,然后点击下拉框,而不是睡眠方式 -// doWait(1500); - // 等待页面状态加载完成 - // waitPageLoaded(); JSWaiter.waitUntilJQueryReady(); break; @@ -700,6 +696,7 @@ * @param keys * 要输入的内容 */ + @Deprecated public static WebElement findByAwaitAndSend(By by, java.lang.CharSequence... keys) { // 先清空文本框上面的然后再输入 @@ -720,6 +717,7 @@ * 要运行的js脚本 */ public static Object runJavaScript(String script) { + JSWaiter.waitUntilJQueryReady(); Object response = ((JavascriptExecutor) Utils.driver) .executeScript(script); logger.info("执行脚本:" + script + " 返回值:" + response); @@ -811,19 +809,6 @@ } /** - * 切换到指定的window - * - * @param window - * window的名字 - */ - public static void switchToWindow(String window) { - logger.info("准备开始切换window:" + window); - Utils.driver.switchTo().window(window); - logger.info("切换window:" + window + "成功"); - doWait(null); - } - - /** * 休眠等待一下 * * @param time