ホームページ > バックエンド開発 > C++ > Seleniumのウィンドウハンドルを使用して、ブラウザタブとWindowsを介して確実に反復するにはどうすればよいですか?

Seleniumのウィンドウハンドルを使用して、ブラウザタブとWindowsを介して確実に反復するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-27 02:51:07
オリジナル
716 人が閲覧しました

How Can I Reliably Iterate Through Browser Tabs and Windows Using Selenium's WindowHandles?

セレニウムのウィンドウハンドルを使用してタブとウィンドウを特徴付ける最良の方法

質問:

Selenium WebDriver Automated Internet Explorer 11テストを使用する場合、ハンドルの種類が予測不可能であるため、Driver.WindowHandlesを介して複数のブラウザーWindowsにアクセスすることが困難になります。

解決策:

ウィンドウの並べ替えに頼る代わりに、より効果的な方法は、WebDriverWaitを使用して新しいタブまたはウィンドウが開くのを待ってから、更新されたWindowHandlesリストを収集することです。次に、これらのハンドルを通過し、spitchto()を使用して必要なウィンドウにアクセスできます。

コード例(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.firefox.FirefoxDriver;
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 实例
        WebDriver driver = new InternetExplorerDriver();

        // 打开 Google
        driver.get("http://www.google.com");

        // 存储第一个标签页的句柄
        String firstTab = driver.getWindowHandle();

        // 在新标签页中打开 Facebook
        ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");

        // 等待新标签页打开
        WebDriverWait wait = new WebDriverWait(driver, 5);
        wait.until(ExpectedConditions.numberOfWindowsToBe(2));

        // 获取更新的窗口句柄列表
        Set<String> handles = driver.getWindowHandles();

        // 遍历句柄
        Iterator<String> iterator = handles.iterator();
        while (iterator.hasNext()) {
            String currentTab = iterator.next();

            // 检查是否是 Facebook 标签页
            if (!firstTab.equalsIgnoreCase(currentTab)) {
                driver.switchTo().window(currentTab);

                // 确认您在 Facebook 上
                System.out.println("正在操作 Facebook");
            }
        }

        // 存储 Facebook 标签页的句柄
        String secondTab = driver.getWindowHandle();

        // 在新标签页中打开 YouTube
        ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');");

        // 等待 YouTube 标签页打开
        wait.until(ExpectedConditions.numberOfWindowsToBe(3));

        // 再次获取更新的窗口句柄列表
        Set<String> handles2 = driver.getWindowHandles();

        // 再次遍历句柄
        Iterator<String> iterator2 = handles2.iterator();
        while (iterator2.hasNext()) {
            String currentTab = iterator2.next();

            // 检查是否是 YouTube 标签页
            if (!firstTab.equalsIgnoreCase(currentTab) && !secondTab.equalsIgnoreCase(currentTab)) {
                driver.switchTo().window(currentTab);

                // 确认您在 YouTube 上
                System.out.println("正在操作 YouTube");
            }
        }

        // 关闭 WebDriver 实例
        driver.quit();
    }
}</code>
ログイン後にコピー
「Facebookでの作業」は、より正式な代替品に置き換えられます

変数名の改善:

その他の説明変数名(

以上がSeleniumのウィンドウハンドルを使用して、ブラウザタブとWindowsを介して確実に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート