簡體   English   中英

如何等待第二個窗口完全加載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM