2

我正在创建半自动化的应用程序(用户正在打开标签(注意),如果他想转储其中一个,他只需点击热键)。

但是当用户打开很多标签时,我需要知道我应该切换到哪一个。我如何获得 currenttab 索引。或者切换到 Selenium C# 上的当前选项卡?

string windowHandle = Browser.WindowHandles.Last();
string windowHandle = Browser.WindowHandles.First();
string windowHandle = Browser.WindowHandles[1];

...不适合我。

4

1 回答 1

3

每次调用时,currenttab索引都可能发生变化Browser.WindowHandles()

虽然普遍的看法是WindowHandles 会像最旧的窗口一样排序,最后是最新的窗口。但事实并非如此:它是完全随机的!

在一次讨论中,西蒙明确提到:

虽然用于存储句柄列表的数据类型可以按插入排序,但 WebDriver 实现迭代窗口句柄以插入它们的顺序不需要稳定。排序是任意的。

此评论与它提到的“获取窗口句柄”部分非常一致:

为了确定与浏览器的特定交互是否打开了新窗口,可以获取交互执行前的窗口句柄集合,并与执行操作后的集合进行比较。

您可以在使用 Selenium 的 WindowHandles 跟踪和迭代选项卡和窗口的最佳方式中找到相关的详细讨论


更新

根据您的评论用户切换选项卡(在窗口中),但驱动程序仍专注于您需要诱导WebDriverWait的另一个选项卡,您可以在getWindowHandles() not working in firefox 58numberOfWindowsToBe(n)中找到详细讨论。焦点仍然在父选项卡上并且确实不转移到下一个标签

于 2019-08-17T20:58:18.287 回答