C# 按给定编号导航到“浏览器窗口”选项卡

C# 按给定编号导航到“浏览器窗口”选项卡,c#,selenium-webdriver,selenium-chromedriver,C#,Selenium Webdriver,Selenium Chromedriver,我正在创建一个命令,该命令将按编号导航到浏览器的选项卡 public void NavigateToBrowsersTabByNumber(int nr) { driver.FindElement(By.TagName("body")).SendKeys(Keys.Control + nr); driver.SwitchTo().Window(driver.WindowHandles[nr -1]); } 主要问题是,只有当活动选项卡是第一个选项卡(windows句柄索引0)时

我正在创建一个命令,该命令将按编号导航到浏览器的选项卡

public void NavigateToBrowsersTabByNumber(int nr)
{
    driver.FindElement(By.TagName("body")).SendKeys(Keys.Control + nr);
    driver.SwitchTo().Window(driver.WindowHandles[nr -1]);
}
主要问题是,只有当活动选项卡是第一个选项卡(windows句柄索引0)时,它才起作用。否则它将停留在当前选项卡上。如果我手动导航到第一个选项卡并切换到第一个句柄
driver.SwitchTo().Window(driver.WindowHandles[0])调用该方法时,一切都会按预期工作

摘要:
SendKeys
仅在第一个选项卡处于焦点状态时才起作用。

我正在使用selenium webdriver:v2.48.1。

为什么不直接使用tabs.get函数,而不是发送击键


public void navigateBrowserThankyNumber(整数n)
{
ArrayList tabs=新的ArrayList(driver.getWindowHandles());
driver.switchTo().window(tabs.get(n-1));
}

第一个打开的选项卡应自动具有焦点。但如果它不是出于某种原因,您可以手动将焦点添加到它,然后使用SendKeys。试试这个:

    driver.SwitchTo().ActiveElement();
    IWebElement body = driver.FindElement(By.TagName("body"));
    body.SendKeys(Keys.Control + Keys.Tab);
这应该切换到下一个选项卡,或者如果您想切换到特定选项卡e.a

    body.SendKeys(Keys.Control + +Keys.NumberPad2);

这就是我用python解决这个问题的方法。我只需调用该方法并将其传递给我要访问的选项卡

def switch_to_new_window(driver, window):
    driver.switch_to_window(driver.window_handles[window])