Selenium WindowHandels无法识别模态窗口

时间:2017-02-02 00:19:50

标签: c# selenium

我有一个网站打开一个新的(较小的)浏览器窗口,我试图在Selenium中测试。

我正在使用ChromeWebDriver(2.27)。

我有以下代码:

String parentHandle = Driver.Instance.WindowHandles[0].ToString();
String modalHandel = Driver.Instance.WindowHandles[1].ToString();

我尝试了几种不同的变体(即使用ReadOnlyCollections和amp for for循环),结果相同。

当我看到Driver.Instace.WindowHandles时,我看到2个条目。第一个(我猜)是我的主窗口,第二个是模态。

enter image description here

但是,大约50%的时间此代码出错。

String modalHandel = Driver.Instance.WindowHandles[1].ToString();

说明:

  

指数超出范围。必须是非负数且小于   集合。

也许是在当天晚些时候,但我真的不明白为什么这有时会起作用,有时却不行。任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

这可能是时间问题,较小的浏览器可能会在您查找WindowHandle之后打开,因此Driver.Instance.WindowHandles仅包含父WindowHandle。您可以尝试等到有两个句柄

ReadOnlyCollection<string> windowHandles;
while ((windowHandles = Driver.Instance.WindowHandles).Count < 2);

string parentHandle = windowHandles[0]; // its already string, no need to call ToString()
string modalHandel = windowHandles[1];

您还可以限制时间

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

ReadOnlyCollection<string> windowHandles;
while ((windowHandles = driver.WindowHandles).Count < 2 && stopwatch.Elapsed.TotalSeconds < 10);

string parentHandle = windowHandles[0];
string modalHandel = windowHandles[1];