Amalan terbaik untuk pengurusan tetingkap dan tab Selenium yang cekap
Pengenalan
Menguruskan berbilang tab dan tetingkap boleh menjadi rumit apabila menggunakan Selenium WebDriver untuk ujian UI dengan Internet Explorer 11. Untuk menjejaki mereka dengan cekap, adalah penting untuk menggunakan atribut WindowHandles
. Walau bagaimanapun, masalah biasa berlaku apabila susunan pemegang tetingkap yang dijangkakan tidak stabil. Artikel ini menerangkan cara menyelesaikan masalah ini dan meneroka penyelesaian yang lebih berkesan.
Rawak pesanan pemegang tingkap
Bertentangan dengan jangkaan, susunan WindowHandles
tidak stabil. Pelaksanaan WebDriver berulang ke atasnya dengan cara sewenang-wenangnya tanpa sebarang jaminan tertib sisipan. Ini boleh menyukarkan untuk mengurus berbilang tetingkap dengan berkesan dan bertukar antara tetingkap tersebut.
Gunakan kamus untuk pengurusan
Satu penyelesaian ialah mencipta kamus menggunakan WindowHandle
GUID sebagai kunci dan jenis halaman yang sepadan sebagai nilainya. Pendekatan ini memastikan penukaran yang betul antara tingkap. Walau bagaimanapun, ia memerlukan penyelenggaraan tambahan, terutamanya apabila tingkap ditutup.
Pengenalan WebDriverWait
Cara yang lebih baik ialah menggunakan WebDriverWait
. Ini membolehkan anda menjeda sebelum mengumpul WindowHandles
. Dengan mengumpulkannya setiap kali anda membuka tab/tetingkap baharu, anda boleh membuat senarai tersusun dan beralih ke tetingkap yang dikehendaki menggunakan switchTo().window(newly_opened)
.
Contoh pelaksanaan
Berikut ialah contoh pelaksanaan dalam Java:
<code class="language-java">import java.util.Iterator; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class 新标签页处理 { public static void main(String[] args) { WebDriver driver = new InternetExplorerDriver(); driver.get("http://www.google.com"); String first_tab = driver.getWindowHandle(); ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');"); WebDriverWait wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.numberOfWindowsToBe(2)); Set<String> s1 = driver.getWindowHandles(); Iterator<String> i1 = s1.iterator(); String next_tab; while (i1.hasNext()) { next_tab = i1.next(); if (!first_tab.equalsIgnoreCase(next_tab)) { driver.switchTo().window(next_tab); } } } }</code>
Kod ini membuka berbilang tab secara automatik, menunggu ia dimuatkan dan kemudian beralih ke tetingkap yang sepadan menggunakan senarai WindowHandles
yang dipesan.
Kesimpulan
Walaupun menggunakan kamus untuk pengurusan tetingkap adalah mungkin, pengenalan WebDriverWait
dan koleksi semasa membuat tab baharu WindowHandles
menyediakan cara yang lebih cekap dan lebih cekap untuk menjejak dan mengulangi berbilang tab dan tetingkap dalam penyelesaian Fleksibel.
Atas ialah kandungan terperinci Bagaimana cara mengesan dan melangkah dengan cekap melalui selenium windowhandles dalam urutan yang tidak dapat diramalkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!