セレニウムのウィンドウハンドルを使用してタブとウィンドウを特徴付ける最良の方法
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>
firstTab
コア機能と説明は変更されていません
first_tab
以上がSeleniumのウィンドウハンドルを使用して、ブラウザタブとWindowsを介して確実に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。