[英]how to wait for the second window to load completely
我從父窗口單擊一個按鈕,它在新(子)窗口中加載一個查看器,然后我在第二個窗口中執行一些操作。 在加載我的第二個窗口之前,腳本嘗試執行一些操作但失敗了。 如果我把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
代替thread.sleep()
,您可以使用ExpectedConditions
類在預期窗口數上添加有針對性的顯式等待:
import org.openqa.selenium.support.ui.WebDriverWait;
import static org.openqa.selenium.support.ui.ExpectedConditions.numberOfWindowsToBe;
// we need the above using statements to use WebDriverWait and ExpectedConditions
// first wait for number of windows to be 2:
WebDriverWait wait = new WebDriverWait(browser, 10);
wait.until(ExpectedConditions.numberOfWindowsToBe(2)));
// switch to a new window
String window2 = (String) AllWindowHandles.toArray()[1];
scenario.write("Switching to Child (Viewer) window = "+ AllWindowHandles.toArray()[1]);
browser.switchTo().window(window2);
// wait on some element on the page to be fully loaded
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("outerDiv")));
在調用String window2 = (String) AllWindowHandles.toArray()[1];
之前, ExpectedConditions
應該等待 2 個窗口存在String window2 = (String) AllWindowHandles.toArray()[1];
-- 這應該確保browser.getWindowHandles()
在嘗試切換到第二個窗口之前返回2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.