/** * */ package test_4_1; import static org.testng.AssertJUnit.assertTrue; import java.util.List; import java.util.NoSuchElementException; import java.util.concurrent.TimeUnit; import java.util.function.Function; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.StaleElementReferenceException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.FluentWait; import org.openqa.selenium.support.ui.Wait; import org.testng.AssertJUnit; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import test_4_1.tools.Utils; /** * @author cherry 2016-02-25 * */ public class Recyle { @BeforeMethod public void init() { Utils.init(); Login login = new Login(); // 直接跳到回收界面,不用那么麻烦的点桌面回收清洗图标、然后再切换窗口 Utils.driver.get(Utils.settings.get("服务器地址").toString() + "/?logonType=1080p"); login.loginAction(); } @Test public void recyle_fail() { try { // 获取当前日期 // Date now = new Date(); // DateFormat date = DateFormat.getDateInstance(); // String dateNow = date.format(now); // System.out.println(dateNow); // 回收失败 // Utils.retryingFind(By // .xpath("//td[contains(text(), '心血管2区')] and td[contains(text(), '" // + // dateNow +"')]")).click(); // 输入临床科室条码,只显示临床科室的申请单 WebElement bodyElement = Utils.retryingFindAndSendKeys( By.tagName("body"), Utils.settings.getJSONObject("临床科室") .getString("条码") + "\n"); // try { // (2000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // 手术室有多张单,则获取器械包的器械(材料)清单表格,点击第一张单 // Utils.retryingFindClickFirstCellOfTable(By.id("awaitForRecycleTable")); // 手术室只有一张单,等待新打开的回收单页面加载完成 Utils.retryingFindAndClick(By.cssSelector(".btn-e")); assertTrue(Utils.retryingFind(By.id("idBox")).getText() .contains("还有部分器械包未装入容器,不能保存。")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室通过申请单回收、修改申请单数量 * */ @Test public void recyle_oneSupplyRoom() { try { // 输入临床科室条码,只显示临床科室的申请单 WebElement bodyElement = Utils.retryingFindAndSendKeys( By.tagName("body"), Utils.settings.getJSONObject("临床科室") .getString("条码") + "\n"); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); // 获取器械包的器械(材料)清单表格 Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(100, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); WebElement tousseItemTable = wait .until(new Function() { public WebElement apply(WebDriver driver) { return Utils.retryingFind(By.id("tousseItemTable")); } }); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码") + "\n"); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐2") .getString("条码") + "\n"); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); dialogWindowClose(); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/a[contains(text(), '+')]")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室通过申请单回收带标识牌的器械包、修改申请单数量、通过查找添加器械包 * */ @Test public void recyle_oneSupplyRoomSignboard() { try { String barcode = Utils.settings.getJSONObject("临床科室").getString( "条码"); // 输入临床科室条码,只显示临床科室的申请单 Utils.retryingFindAndSendKeys(By.tagName("body"), barcode + "\n"); Utils.retryingFindClickFirstCellOfTable(By .id("awaitForRecycleTable")); // 获取器械包的器械(材料)清单表格 WebElement tousseItemTable = scanRecycleUserBarcode(); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐4") .getString("条码") + "\n"); dialogWindowClose(); Utils.retryingFindAndClick(By.linkText("添加器械包")); Utils.driver.switchTo().defaultContent(); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id(Utils.settings.getJSONObject( "回收查询").getString("按钮2"))); Utils.retryingFindAndClick(By.id(Utils.settings.getJSONObject( "回收查询").getString("按钮2"))); Utils.retryingFindAndClick(By.linkText(Utils.settings .getJSONObject("一级供应室器械包2").getString("名称"))); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/a[contains(text(), '+')]")); for (WebElement addButton : addButtons) { addButton.click(); } tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码") + "\n"); dialogWindowClose(); // 扫描标识牌条码回收入筐 tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室器械包1") .getString("标识牌条码1") + "\n"); Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } Utils.doWait(1000); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室通过申请单回收自定义器械包 * */ @Test public void recyle_customSet() { try { boolean displayed = false; // 输入临床科室条码,只显示临床科室的申请单 WebElement bodyElement = Utils.retryingFindAndSendKeys( By.tagName("body"), Utils.settings.getJSONObject("临床科室") .getString("条码") + "\n"); // displayed = Utils.retryingFindClickFirstCellOfTable(By // .id("awaitForRecycleTable")); WebElement element = Utils.retryingFind(By.id("tousseItemTable")); if (element == null) { Utils.retryingFindClickFirstCellOfTable(By .id("awaitForRecycleTable")); } else { Utils.retryingFind(By.id("tousseItemTable")); } String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); WebElement tousseItemTable = scanRecycleUserBarcode(); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐4") .getString("条码") + "\n"); dialogWindowClose(); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室使用记录转申请单回收,修改回收数量 * */ @Test public void recyle_userRecordApplyUpdate() { try { // 获取器械包的器械(材料)清单表格 Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(100, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); WebElement tousseItemTable = wait .until(new Function() { public WebElement apply(WebDriver driver) { return Utils.retryingFind(By.id("tousseItemTable")); } }); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码") + "\n"); // 增加休眠,避免扫描后提示条码不符合规范的问题 tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐3") .getString("条码") + "\n"); // 根据cssClass获取入筐按钮集合 List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); // 序号,回收数量输入框的名称后缀 int index = addButtons.size(); for (WebElement addButton : addButtons) { index--; // 点击回收数量输入框 Utils.retryingFindAndClick(By.id("recycleAmount" + index)); // 弹出了数量输入的对话框 WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.linkText("1")); Utils.retryingFindAndClick(By.cssSelector(".btn-a")); Utils.driver.switchTo().defaultContent(); addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室使用记录转申请单回收 * */ @Test public void recyle_userRecordApply() { try { WebElement tousseItemTable = scanRecycleUserBarcode(); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐3") .getString("条码") + "\n"); // 根据cssClass获取入筐按钮集合 List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室回收还物单 * */ @Test public void recyle_return() { try { // 获取body对象,sendKeys更加可靠。actions.click()的方式在win10,IE11下不可靠 // 输入临床科室条码,只显示临床科室的申请单 WebElement bodyElement = Utils.retryingFindAndSendKeys( By.tagName("body"), Utils.settings.getJSONObject("临床科室") .getString("条码") + "\n"); Utils.retryingFindClickFirstCellOfTable(By .id("awaitForRecycleTable")); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); WebElement tousseItemTable = scanRecycleUserBarcode(); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐3") .getString("条码") + "\n"); // 根据cssClass获取入筐按钮集合 List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室通过添加回收单回收、丢失、报损 * */ @Test public void recyle_recyleAndDropAndScrap() { try { Utils.retryingFindAndClick(By.linkText("添加")); Utils.retryingFindAndClick(By.linkText("添加器械包")); Utils.driver.switchTo().defaultContent(); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id(Utils.settings.getJSONObject( "回收查询").getString("按钮1"))); Utils.retryingFindAndClick(By.id(Utils.settings.getJSONObject( "回收查询").getString("按钮2"))); WebElement findElement = Utils.retryingFindAndClick(By .linkText(Utils.settings.getJSONObject("一级供应室器械包1") .getString("名称"))); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(100, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); WebElement tousseItemTable = wait .until(new Function() { public WebElement apply(WebDriver driver) { return Utils.retryingFind(By.id("tousseItemTable")); } }); // 扫描科室条码 tousseItemTable.sendKeys(Utils.settings.getJSONObject("临床科室") .getString("条码") + "\n"); // 扫描篮筐条码 tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码") + "\n"); // 扫描篮筐条码 tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐2") .getString("条码") + "\n"); // 回收入筐增加丢失、报损 List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { Utils.retryingFindAndClick(By.cssSelector(".btn-b")); frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id("recyclingErrorTable")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/a[contains(text(), '+')]")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/a[contains(text(), '确定')]")); Utils.driver.switchTo().defaultContent(); Utils.retryingFindAndClick(By.cssSelector(".btn-c")); frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id("recyclingDamageForm")); Utils.retryingFindAndClick(By.cssSelector("a[class=add]")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/a[contains(text(), '确定')]")); Utils.driver.switchTo().defaultContent(); addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".divStyle")); frame = Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By.id("recyclingErrorTable")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/a[contains(text(), '+')]")); Utils.retryingFindAndClick(By.cssSelector("a[class='submit']")); Utils.driver.switchTo().defaultContent(); Utils.retryingFindAndClick(By.cssSelector(".btn-e")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室通过添加回收单回收带标识牌的器械包并丢失、报损 * */ @Test public void recyle_recyleSignboardAndDropAndScrap() { try { // 点击添加按钮 Utils.retryingFindAndClick(By.id("addRecycleRecordBtn")); WebElement recycleForm = scanRecycleUserBarcode(); // 扫描科室条码 Utils.retryingFindAndSendKeys(By.id("tousseItemTable"), Utils.settings.getJSONObject("临床科室").getString("条码") + "\n"); Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class) .ignoring(NullPointerException.class); // 断言临床科室的填写成功 wait.until(ExpectedConditions.attributeContains(By.id("depart"), "value", Utils.settings.getJSONObject("临床科室").getString("名称"))); boolean displayed = false; Utils.retryingFindAndSendKeys(By.id("tousseItemTable"), Utils.settings.getJSONObject("一级供应室清洗篮筐2").getString("条码") + "\n"); dialogWindowClose(); // 扫描标识牌条码回收入筐 Utils.retryingFindAndSendKeys( By.id("tousseItemTable"), Utils.settings.getJSONObject("一级供应室器械包1").getString( "标识牌条码2") + "\n"); // 增加丢失、报损 Utils.retryingFindAndClick(By.id("recyclingErrorButton0")); Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By.id("recyclingErrorTable")); // 点击第1行的+号按钮 Utils.retryingFindAndClick(By.id("addButton0")); Utils.retryingFindAndClick(By.id("errorSubmitButton")); Utils.driver.switchTo().defaultContent(); Utils.retryingFindAndClick(By.id("recyclingDamageButton0")); Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By.id("recyclingDamageForm")); Utils.retryingFindAndClick(By.id("addButton0")); Utils.retryingFindAndClick(By.id("damageSubmitButton")); // 加急 Utils.driver.switchTo().defaultContent(); Utils.retryingFindAndClick(By.id("urgentAmountDiv0")); Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By.id("recyclingErrorTable")); Utils.retryingFindAndClick(By.id("addButton0")); Utils.retryingFindAndClick(By.id("urgentSubmitButton")); Utils.driver.switchTo().defaultContent(); // 扫描篮筐条码 recycleForm.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐3") .getString("条码") + "\n"); dialogWindowClose(); Utils.retryingFindAndClick(By.cssSelector(".btn-a")); Utils.retryingFindAndClick(By.cssSelector(".btn-e")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /* * 切换篮筐并丢失材料 */ @Test public void recyle_changeBasket() { try { Utils.retryingFindAndClick(By.id("addRecycleRecordBtn")); WebElement recycleForm = scanRecycleUserBarcode(); // 扫描科室条码 recycleForm.sendKeys(Utils.settings.getJSONObject("临床科室") .getString("条码") + "\n"); dialogWindowClose(); Utils.retryingFindAndClick(By.id("add-bao")); Utils.driver.switchTo().defaultContent(); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id(Utils.settings.getJSONObject( "回收查询").getString("按钮2"))); Utils.retryingFindAndClick(By.id(Utils.settings.getJSONObject( "回收查询").getString("按钮2"))); Utils.retryingFindAndClick(By.linkText(Utils.settings .getJSONObject("一级供应室器械包2").getString("名称"))); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); recycleForm.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码") + "\n"); dialogWindowClose(); List addButtons = recycleForm.findElements(By .cssSelector(".btn-a")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/a[contains(text(), '+')]")); for (WebElement addButton : addButtons) { addButton.click(); } dialogWindowClose(); Utils.retryingFindAndClick(By.id("saveBtn")); Utils.retryingFind(By.id("recyclingRecordTable")); Utils.retryingFindAndClick(By.id("tr0")); Utils.retryingFindClickFirstCellOfTable(By .id("recyclingRecordTable")); Utils.retryingFindAndClick(By.id("B" + Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码"))); dialogWindowClose(); recycleForm = scanRecycleUserBarcode(); recycleForm.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐4") .getString("条码") + "\n"); dialogWindowClose(); List addButtons2 = recycleForm.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons2) { addButton.click(); } // 增加材料丢失 Utils.retryingFindAndClick(By.id("recyclingErrorButton0")); Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By.id("recyclingErrorTable")); // 点击第1行的+号按钮 Utils.retryingFindAndClick(By.id("addButton0")); Utils.retryingFindAndClick(By.id("errorSubmitButton")); Utils.driver.switchTo().defaultContent(); Utils.retryingFindAndClick(By.id("saveBtn")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 旧的外来器械回收 * */ @Test public void recyle_oldForeign() { try { Utils.retryingFindAndClick(By.id("enterpriseView")); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("iframe_enterpriseView")); Utils.retryingFindAndClick(By .xpath("//div/a/span[contains(text(), '回收清点')]")); Utils.retryingFindAndClick(By.cssSelector("a[target='mainFrame']")); frame = Utils.retryingFindAndSwitchToFrame(By.id("mainFrame")); Utils.retryingFindAndClick(By .xpath("//tbody/tr/td/div[contains(text(), '待接收')]")); Utils.retryingFindAndClick(By.id("editTbar")); String currentwindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(currentwindowhandle); Utils.retryingFindAndSendKeys( By.cssSelector("input[name='basketBarcode']"), Utils.settings.getJSONObject("二级供应室清洗篮筐1").getString("条码") + "\n"); Utils.retryingFindAndClick(By .xpath("//span[contains(text(), '确认接收')]")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 外来器械回收修改材料是否植入物及数量 * */ @Test public void recyle_Foreign() { try { String a = Utils.settings.getJSONObject("临床科室").getString("条码"); boolean displayed = false; // 输入临床科室条码,只显示临床科室的申请单 Utils.retryingFindAndSendKeys(By.tagName("body"), a + "\n"); // bodyElement.sendKeys(); WebElement element = Utils.retryingFind(By.id("tousseItemTable")); if (element != null) { displayed = element.isDisplayed(); } if (displayed) { } else { Utils.retryingFindClickFirstCellOfTable(By .id("awaitForRecycleTable")); } // 获取器械包的器械(材料)清单表格 WebElement tousseItemTable = scanRecycleUserBarcode(); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐4") .getString("条码") + "\n"); Utils.retryingFindAndClick(By.id("showTousseName0")); Utils.driver.switchTo().defaultContent(); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id("includeImplant1")); Utils.retryingFindAndClick(By.id("amount1")); Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); a = (int) (Math.random() * 8 + 1) + ""; Thread.sleep(500); Utils.retryingFindAndClick(By.id("button" + a)); Utils.retryingFindAndClick(By.id("button6")); Utils.retryingFindAndClick(By.id("okButton")); Utils.driver.switchTo().defaultContent(); frame = Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By.id("ftDefinitionSubmitButton")); Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); wait.until(ExpectedConditions.alertIsPresent()); Alert alertBox = Utils.driver.switchTo().alert(); alertBox.accept(); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); Thread.sleep(1500); } catch (Exception e) { System.out.println("异常信息:"); e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 外来器械回收修改数量 * */ @Test public void recyle_Foreign_edit() { try { String barcode = Utils.settings.getJSONObject("临床科室").getString( "条码"); // 输入临床科室条码,只显示临床科室的申请单 Utils.retryingFindAndSendKeys(By.tagName("body"), barcode + "\n"); Utils.retryingFindClickFirstCellOfTable(By .id("awaitForRecycleTable")); WebElement tousseItemTable = scanRecycleUserBarcode(); Utils.retryingFindAndSendKeys(By.id("tousseItemTable"), Utils.settings.getJSONObject("一级供应室清洗篮筐4").getString("条码") + "\n"); dialogWindowClose(); Utils.retryingFindAndClick(By.id("showTousseName0")); Utils.driver.switchTo().defaultContent(); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id("amount1")); WebElement amountFrame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); String a = (int) (Math.random() * 8 + 1) + ""; Thread.sleep(500); Utils.retryingFindAndClick(By.id("button" + a)); Utils.retryingFindAndClick(By.id("button5")); Utils.retryingFindAndClick(By.id("okButton")); Utils.driver.switchTo().defaultContent(); frame = Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By.id("ftDefinitionSubmitButton")); Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); wait.until(ExpectedConditions.alertIsPresent()); Alert alertBox = Utils.driver.switchTo().alert(); alertBox.accept(); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 回收后,修改数量、换篮筐 * */ @Test public void recyle_change() { Utils.retryingFindAndClick(By.id("depart")); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.id("buttonX")); String name = Utils.settings.getJSONObject("临床科室").getString("名称"); Utils.retryingFindAndClick(By.xpath("//div/ul/li/a[contains(text(), '" + name + "')]")); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); Utils.retryingFindAndClick(By.id("applicationType")); frame = Utils.retryingFindAndSwitchToFrame(By.id("xubox_iframe")); Utils.retryingFindAndClick(By .xpath("//div/ul/li/a[contains(text(), '通用申请单')]")); recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); Utils.retryingFindAndClick(By.id("recyclingRecordTable")); Utils.retryingFindAndClick(By.xpath("//i/a[contains(text(), '删除')]")); Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); WebElement tousseItemTable = wait .until(new Function() { public WebElement apply(WebDriver driver) { return Utils.retryingFind(By.id("tousseItemTable")); } }); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码") + "\n"); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); } /** * 快速回收 * */ @Test public void recyle_quickly() { try { Utils.retryingFindAndClick(By.xpath("//body/div[1]/div[2]/img[2]")); Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); WebElement tousseItemTable = wait .until(new Function() { public WebElement apply(WebDriver driver) { return Utils.retryingFind(By.id("tousseItemTable")); } }); tousseItemTable.sendKeys(Utils.settings.getJSONObject("一级供应室清洗篮筐1") .getString("条码") + "\n"); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); Utils.retryingFindAndClick(By.cssSelector(".btn-d")); wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); wait.until(ExpectedConditions.alertIsPresent()); Alert alertBox = Utils.driver.switchTo().alert(); alertBox.accept(); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室丢失后,确认 * */ @Test public void recyle_confirm() { try { WebElement bodyElement = Utils.retryingFind(By.tagName("body")); Utils.retryingFindAndClick(By.id("state")); WebElement frame = Utils.retryingFindAndSwitchToFrame(By .id("xubox_iframe")); Utils.retryingFindAndClick(By.linkText("未确认")); String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); Utils.retryingFindAndClick(By.id("recyclingRecordTable")); Utils.retryingFindAndClick(By.id("confirmBtnTd")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 一级供应室丢失后,确认 * */ @Test public void recyle_confirm_new() { try { Utils.retryingFind(By.id("recyclingRecordTable")); Utils.retryingFindAndClick(By.cssSelector("tr[bgcolor='#FF8C69']")); Utils.retryingFindClickFirstCellOfTable(By .id("recyclingRecordTable")); Utils.retryingFindAndClick(By.id("confirmBtnTd")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } /** * 二级供应室通过申请单自定义回收 * */ @Test public void recyle_custom() { try { String recyclingFormWindowhandle = Utils.driver.getWindowHandle(); Utils.driver.switchTo().window(recyclingFormWindowhandle); // 获取器械包的器械(材料)清单表格 WebElement tousseItemTable = scanRecycleUserBarcode(); Utils.changeCustomWindow(); Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); tousseItemTable = wait.until(new Function() { public WebElement apply(WebDriver driver) { return Utils.retryingFind(By.id("tousseItemTable")); } }); tousseItemTable.sendKeys(Utils.settings.getJSONObject("二级供应室清洗篮筐1") .getString("条码") + "\n"); List addButtons = tousseItemTable.findElements(By .cssSelector(".btn-a")); for (WebElement addButton : addButtons) { addButton.click(); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); for (String winHandle : Utils.driver.getWindowHandles()) { Utils.driver.switchTo().window(winHandle); } Utils.retryingFindAndClick(By.cssSelector(".btn-e")); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } } @AfterMethod public void after() { Utils.driver.quit(); } /** * 获取Html Table的第一个单元格,即第一行第一列的单元格 * * @param table * 表格对象 * @return 单元格对象 */ public WebElement getFirstCellOfTable(WebElement table) { WebElement cell = null; // Now get all the TR elements from the table List allRows = table.findElements(By.tagName("tr")); System.out.println("rows size = " + allRows.size()); if (allRows != null && allRows.size() > 0) { WebElement row = allRows.get(0); // return row; List cells = row.findElements(By.tagName("td")); if (cells != null && cells.size() > 0) { cell = cells.get(0); } } return cell; } /** * 省医回收扫描回收人和清点人 */ public WebElement scanRecycleUserBarcode() { WebElement table = null; try { // 扫描回收人条码 String name = Utils.settings.getJSONObject("回收人").getString("条码"); table = Utils.retryingFindAndSendKeys(By.id("tousseItemTable"), name + "\n"); // 断言回收人的姓名填写成功 Wait wait = new FluentWait(Utils.driver) .withTimeout(5000, TimeUnit.MILLISECONDS) .pollingEvery(250, TimeUnit.MILLISECONDS) .ignoring(NoSuchElementException.class) .ignoring(StaleElementReferenceException.class); wait.until(ExpectedConditions.attributeContains(By .id("recyclingUser"), "value", Utils.settings .getJSONObject("回收人").getString("姓名"))); // AssertJUnit.assertEquals(Utils.settings.getJSONObject("回收人").getString("姓名") // , // Utils.retryingFind(By.id("recyclingUser")).getAttribute("value")); // for (String winHandle : Utils.driver.getWindowHandles()) { // Utils.driver.switchTo().window(winHandle); // } // String recyclingFormWindowhandle = // Utils.driver.getWindowHandle(); // Utils.driver.switchTo().window(recyclingFormWindowhandle); name = Utils.settings.getJSONObject("清点人").getString("条码"); // Thread.sleep(1000); // Utils.retryingFind(By.cssSelector("input[value='清点人员']")) // .click(); // 扫描清点人条码 // 继续通过retryFind方式查找table,然后点击,提高可靠性 table = Utils.retryingFindAndSendKeys(By.id("tousseItemTable"), name + "\n"); // 断言清点人的姓名填写成功 wait.until(ExpectedConditions.attributeContains(By.id("operator"), "value", Utils.settings.getJSONObject("清点人") .getString("姓名"))); // AssertJUnit.assertEquals(Utils.settings.getJSONObject("清点人").getString("姓名") // , // Utils.retryingFind(By.id("operator")).getAttribute("value")); // for (String winHandle : Utils.driver.getWindowHandles()) { // Utils.driver.switchTo().window(winHandle); // } // recyclingFormWindowhandle = Utils.driver.getWindowHandle(); // Utils.driver.switchTo().window(recyclingFormWindowhandle); // Utils.retryingFind(By.cssSelector("input[value='回收人员']")) // .click(); } catch (Exception e) { e.printStackTrace(); AssertJUnit.fail(e.getMessage()); } return table; } private void dialogWindowClose() { boolean displayed = false; WebElement element = Utils.retryingFind(By .xpath("//button/span[contains(text(), '是')]")); if (element != null) { displayed = element.isDisplayed(); } if (displayed) { Utils.retryingFindAndClick(By .xpath("//button/span[contains(text(), '是')]")); } } }