- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在与 Selenium webdriver 合作,为 Internet Explorer 11 进行 UI 测试。在测试的 Web 应用程序中,会弹出几个屏幕。在一些测试中,我们最终得到了三个浏览器窗口,因此也得到了三个 Driver.WindowHandles。为了从一个 WindowHandle 切换到另一个,我们期望 Driver.WindowHandles 的排序方式是最旧的窗口在前,最新的窗口在最后。但事实并非如此:它完全是随机的!
因为 windowhandle 是一个 GUID,所以我们最终创建了一个字典,其中 WindowHandle GUID 作为键,其值为浏览器窗口中加载的页面类型的值。但这也会导致在关闭窗口时维护字典。
对于这么简单的事情来说,似乎需要做很多工作。有没有更好的解决方案?
最佳答案
你说得非常正确:
WindowHandles would be sorted like the oldest windows first and the newest windows last. But this is not the case: It is totaly random!
在一次讨论中,Simon 明确提到:
While the datatype used for storing the list of handles may be ordered by insertion, the order in which the WebDriver implementation iterates over the window handles to insert them has no requirement to be stable. The ordering is arbitrary.
因此,我们将引发 WebDriverWait
,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和 switchTo().window(newly_opened)
根据需要:
Please adjust the
Test Environment
if needed [My configuration -Selenium
: 3.5.3,IEDriverServer
: 3.5.0.0 (64-bit),IE
: v10.0]
package demo;
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 NEW_TAB_Handling {
public static void main(String[] args) {
System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();
driver.get("http://www.google.com");
String first_tab = driver.getWindowHandle();
System.out.println("Working on Google");
((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();
while(i1.hasNext())
{
String next_tab = i1.next();
if (!first_tab.equalsIgnoreCase(next_tab))
{
driver.switchTo().window(next_tab);
System.out.println("Working on Facebook");
}
}
String second_tab = driver.getWindowHandle();
((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');");
wait.until(ExpectedConditions.numberOfWindowsToBe(3));
Set<String> s2 = driver.getWindowHandles();
Iterator<String> i2 = s2.iterator();
while(i2.hasNext())
{
String next_tab = i2.next();
if (!first_tab.equalsIgnoreCase(next_tab) && !second_tab.equalsIgnoreCase(next_tab))
{
driver.switchTo().window(next_tab);
System.out.println("Working on Youtube");
}
}
driver.quit();
System.out.println("Quit the WebDriver instance");
}
}
控制台输出:
Working on Google
Working on Facebook
Working on Youtube
Quit the WebDriver instance
<小时/>
您可以找到python基于Open web in new tab Selenium + Python中的讨论
关于c# - 使用 Selenium 使用 WindowHandles 跟踪和迭代选项卡和窗口的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57674709/
我需要一个 QWindow 来捕获对象 A 中的 screenChanged 信号。 我有带有 Qt::Window 标志的 QWidget B。 B 是 A 的父级。 创建 A 类对象后,我尝试这样
我正在使用 Nightwatch JS 页面对象来创建我的测试。单击打开新选项卡的链接时,我无法将焦点切换到新选项卡。 任何其他搜索都没有在页面对象中使用 windowHandles。 var ver
我们正在与 Selenium webdriver 合作,为 Internet Explorer 11 进行 UI 测试。在测试的 Web 应用程序中,会弹出几个屏幕。在一些测试中,我们最终得到了三个浏
我们正在与 Selenium webdriver 合作,为 Internet Explorer 11 进行 UI 测试。在测试的 Web 应用程序中,会弹出几个屏幕。在一些测试中,我们最终得到了三个浏
我们正在使用 Selenium webdriver 为 Internet Explorer 11 进行 UI 测试。在经过测试的 Web 应用程序中,弹出了几个屏幕。在几个测试中,我们最终得到了三个浏
我修改了 Oracle/Sun AWT 教程页面上发布的 Activator 示例代码 here 修改如下 f.add(new MyCanvas(f.getGraphicsConfiguration(
我是一名优秀的程序员,十分优秀!