我正在创建半自动的应用程序(用户正在打开选项卡(注意(,如果他想转储其中一个,他只需单击热键(。
但是当用户打开很多选项卡时,我需要知道我应该切换到哪个选项卡。 如何获取当前选项卡索引。或者切换到Selenium C#上的当前选项卡?
string windowHandle = Browser.WindowHandles.Last();
string windowHandle = Browser.WindowHandles.First();
string windowHandle = Browser.WindowHandles[1];
。 对我不起作用。
每次调用Browser.WindowHandles()
时,当前选项卡索引可能会更改。
虽然一般的看法是窗口句柄会像最旧的窗口一样排序,最后是最新的窗口。但事实并非如此:这完全是随机的!
在一次讨论中,西蒙明确提到:
虽然用于存储句柄列表的数据类型可以按插入顺序排序,但 WebDriver 实现循环访问窗口句柄以插入它们的顺序不需要稳定。排序是任意的。
此注释与它提到的"获取窗口句柄"部分非常一致:
为了确定与浏览器的特定交互是否打开新窗口,可以在执行交互之前获取窗口句柄集,并将其与执行操作后的集合进行比较。
您可以在使用 Selenium 使用 WindowHandle 跟踪和迭代选项卡和窗口的最佳方式中找到相关的详细讨论
更新
根据您的评论用户切换选项卡(在窗口中(,但驱动程序仍然专注于另一个选项卡,您需要诱导WebDriverWaitfornumberOfWindowsToBe(n)
,您可以在 getWindowHandles(( 中找到详细的讨论,在 Firefox 58 中不起作用.焦点仍保留在父选项卡上,不会转移到下一个选项卡