【发布时间】:2019-11-22 19:52:32
【问题描述】:
我从父窗口单击一个按钮,它会在新(子)窗口中加载一个查看器,然后我在第二个窗口中执行一些操作。在加载我的第二个窗口本身之前,脚本会尝试执行一些操作,但它失败了。如果我输入Thred.sleep,它就会成功。但我不想使用thread.sleep。我们有什么办法可以等待 SECOND/CHILD 窗口完全加载其页面。这里我的第二个窗口(浏览器)是一种 PDF 类型的查看器。下面是我试过的代码。
WebElement row = ele.findElement(By.cssSelector("tr[data-ri=\"0\"]"));
row.findElement(By.className("ui-selection-column")).click();
browser.findElement(By.id("frmResults:btnViewer")).click();
Thread.sleep(5000);
Set<String> AllWindowHandles = browser.getWindowHandles();
String window1 = (String) AllWindowHandles.toArray()[0];
scenario.write("Currently in Parent Window = "+ AllWindowHandles.toArray()[0]);
scenario.write(browser.getCurrentUrl());
scenario.write(browser.getTitle());
String window2 = (String) AllWindowHandles.toArray()[1]; // out of bounds error thrown here
scenario.write("Switching to Child (Viewer) window = "+ AllWindowHandles.toArray()[1]);
browser.switchTo().window(window2);
scenario.write(browser.getCurrentUrl());
scenario.write(browser.getTitle());
WebElement viewer = browser.findElement(By.id("outerDiv"));
assertThat(viewer.isDisplayed()).isTrue();
//browser.close();
scenario.write("Again Switching back to Parent window = "+ AllWindowHandles.toArray()[0]);
browser.switchTo().window(window1);
scenario.write(browser.getCurrentUrl());
scenario.write(browser.getTitle());
更新
当我尝试在这一行获取子窗口编号时出现错误。
String window2 = (String) AllWindowHandles.toArray()[1];
错误:
java.lang.ArrayIndexOutOfBoundsException: 1
at Steps.Steps.verify_the_test_records_are_displayed_in_the_results_table_in_Search_Results_page(Steps.java:115)
at ?.Then Verify the test records are displayed in the results table in Search Results page(Test.feature:10)
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 30.552 s <<< FAILURE! - in Runner.TestRunner
[ERROR] feature(Runner.TestRunner) Time elapsed: 29.389 s <<< FAILURE!
cucumber.runtime.CucumberException: java.lang.ArrayIndexOutOfBoundsException: 1
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
【问题讨论】:
标签: java selenium selenium-webdriver