Rumah > pembangunan bahagian belakang > C++ > Bagaimana cara mengesan dan melangkah dengan cekap melalui selenium windowhandles dalam urutan yang tidak dapat diramalkan?

Bagaimana cara mengesan dan melangkah dengan cekap melalui selenium windowhandles dalam urutan yang tidak dapat diramalkan?

DDD
Lepaskan: 2025-01-27 02:56:10
asal
647 orang telah melayarinya

How to Efficiently Track and Iterate Through Selenium WindowHandles in Unpredictable Order?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan