我有一个网站打开一个新的(较小的)浏览器窗口,我试图在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个条目。第一个(我猜)是我的主窗口,第二个是模态。
但是,大约50%的时间此代码出错。
String modalHandel = Driver.Instance.WindowHandles[1].ToString();
说明:
指数超出范围。必须是非负数且小于 集合。
也许是在当天晚些时候,但我真的不明白为什么这有时会起作用,有时却不行。任何人都可以对此有所了解吗?
答案 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];