C#Selenium在Chrome和Firefox中打开新选项卡时没有新的窗口句柄

C#Selenium在Chrome和Firefox中打开新选项卡时没有新的窗口句柄,c#,google-chrome,selenium,firefox,C#,Google Chrome,Selenium,Firefox,Selenium for Chrome和Firefox使用C#编码,无法切换到在我的自动化测试期间打开的新选项卡。我认为它不会关注新打开的选项卡,因为当我完全运行程序时,我会收到以下错误:“超出范围”异常和“索引超出范围。必须为非负且小于集合的大小。” 我试过使用: driver.SwitchTo().Window(driver.WindowHandles.Last()); 及 但是没有运气。如果我不关闭第一个选项卡,我会收到错误:“NoSuchElementException:无法定位元素:

Selenium for Chrome和Firefox使用C#编码,无法切换到在我的自动化测试期间打开的新选项卡。我认为它不会关注新打开的选项卡,因为当我完全运行程序时,我会收到以下错误:“超出范围”异常和“索引超出范围。必须为非负且小于集合的大小。”

我试过使用:

driver.SwitchTo().Window(driver.WindowHandles.Last());


但是没有运气。如果我不关闭第一个选项卡,我会收到错误:“NoSuchElementException:无法定位元素:{method…}”,我认为这是正确的,因为焦点仍然在第一个选项卡上。任何帮助都将不胜感激。谢谢。

关闭
选项卡[0]
后,旧的
选项卡[1]
将成为新的
选项卡[0]
,因此您应该切换到
选项卡[0]


Selenium在后台运行,因此窗口在运行时不需要处于焦点位置。这也意味着Selenium永远不会将焦点更改回浏览器窗口。如果您在代码运行时观察窗口,您应该能够看到浏览器正在更改选项卡。

一旦关闭
选项卡[0]
,旧的
选项卡[1]
将成为新的
选项卡[0]
,因此您应该切换到
选项卡[0]


Selenium在后台运行,因此窗口在运行时不需要处于焦点位置。这也意味着Selenium永远不会将焦点更改回浏览器窗口。但是,如果您在代码运行时观察窗口,您应该能够看到浏览器正在更改选项卡。

一旦您关闭了
选项卡[0]
,旧的
选项卡[1]
不是变成了新的
选项卡[0]
?是的,我没有注意到这一点。谢谢但现在我唯一的问题是,作为输入的xpath无法在新选项卡上找到。这是另一个我会发现的问题。再次感谢如果这解决了您的问题中提到的问题,我可以将其作为答案发布给您接受。还有一个问题,当驾驶员切换到车窗时,车窗是否自动聚焦?因为到目前为止,要么我的窗口没有聚焦,要么我的xpath错误,因为我总是遇到“无法定位元素”错误。一旦你关闭了
选项卡[0]
,旧的
选项卡[1]
不是变成了新的
选项卡[0]
?是的,我没有注意到这一点。谢谢但现在我唯一的问题是,作为输入的xpath无法在新选项卡上找到。这是另一个我会发现的问题。再次感谢如果这解决了您的问题中提到的问题,我可以将其作为答案发布给您接受。还有一个问题,当驾驶员切换到车窗时,车窗是否自动聚焦?因为到目前为止,要么我的窗口没有聚焦,要么我的xpath错误,因为我总是遇到“找不到元素”的错误。对不起,我应该把我的问题写得更好。我想问的是,当驱动程序使用上面的driver.switchTo函数切换到新选项卡/窗口时,新选项卡/窗口是否会从旧选项卡/窗口更改焦点?是的,这就是该函数的作用;)好的,谢谢。我认为我的XPath是不正确的。非常感谢您花时间帮助我并回答:)要测试XPath,您可以使用Chrome的开发工具,它们允许您在页面上通过XPath搜索DOM。请记住,打开开发工具会分离Selenium。很抱歉,我应该把我的问题写得更好。我想问的是,当驱动程序使用上面的driver.switchTo函数切换到新选项卡/窗口时,新选项卡/窗口是否会从旧选项卡/窗口更改焦点?是的,这就是该函数的作用;)好的,谢谢。我认为我的XPath是不正确的。非常感谢您花时间帮助我并回答:)要测试XPath,您可以使用Chrome的开发工具,它们允许您在页面上通过XPath搜索DOM。请记住,打开开发工具会分离Selenium。
driver.SwitchTo().Window(driver.WindowHandles[1]);
driver.SwitchTo().Window(driver.WindowHandles[0]).Close(); // close the first tab
System.Threading.Thread.Sleep(5000); //Wait 5 seconds just in case
driver.SwitchTo().Window(driver.WindowHandles[1]); //Makes sure I'm on the correct tab