【问题标题】:How to get currently active tab index on Chrome via Selenium?如何通过 Selenium 在 Chrome 上获取当前活动的标签索引?
【发布时间】:2019-12-23 05:52:11
【问题描述】:

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

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

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

... 不适合我。

【问题讨论】:

  • 我想知道用户在哪个标签中。提醒您,用户可以在 chrome 上打开和关闭标签页。
  • 在使用 Webdriver 协议的半自动化应用程序中不可能。Webdriver 客户端需要跟踪活动选项卡。 Selenium 将无法自行检测用户操作,因为如果用户在浏览器中执行任何操作,则没有反向通信。 Webdriver 客户端仅解析客户端生成的请求的响应,即您的情况下的 c# 绑定。您可以查看 Selenium 架构以获得更好的理解。
  • 你推荐哪个扩展?我可以重新创建项目。走哪条路?最好在 C# 上。谢谢。
  • 我只想说一件事 - 我只使用活动标签。即使没有硒,我怎么能做到这一点。

标签: c# selenium tabs window-handles webdriver-w3c-spec


【解决方案1】:

currenttab 索引可能会在您每次调用 Browser.WindowHandles() 时发生变化。

虽然一般的看法是 WindowHandles 会按照最旧的窗口在前排序,最新的窗口在后排序。但事实并非如此:它是完全随机的!

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

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

这条评论与它提到的 Get Window Handles 部分几乎一致:

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

您可以在Best way to keep track and iterate through tabs and windows using WindowHandles using Selenium找到相关的详细讨论


更新

根据您的评论 用户切换选项卡(在窗口中)但驱动程序仍专注于另一个选项卡您需要为 numberOfWindowsToBe(n) 诱导 WebDriverWait 并且您可以找到详细讨论getWindowHandles() not working in firefox 58.The focus remains on parent tab and does not transfer to next tab

【讨论】:

  • 我的程序是半自动化的。用户,如果他们愿意,请单击我的程序上的一个按钮,然后程序在 google chrome 的该选项卡上执行操作。我怎么知道它是哪个标签。如果用户愿意,标签就太多了。
  • 问题是用户切换选项卡(在窗口中)但驱动程序仍然专注于另一个选项卡。我需要检测活动选项卡才能将驱动程序切换到它。
  • @GrandMaster 查看答案更新并让我知道状态。
  • 我知道你想帮忙,但这不是我需要的。正如我所说,该程序是半自动的。用户可以打开许多选项卡(不知道有多少)。在其中之一中,用户可以单击应用程序按钮。 Selenium 应该专注于此选项卡以使用它。我已经明白 Selenium 无法做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
相关资源
最近更新 更多