按给定的数字导航到浏览器窗口选项卡

时间:2015-12-09 11:41:35

标签: 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]);
}

主要问题是它只有在活动标签是第一个时才起作用(窗口句柄索引0)。否则它将保留在当前选项卡中。如果我手动导航到第一个选项卡并切换到第一个句柄driver.SwitchTo().Window(driver.WindowHandles[0]);,则在调用方法时,所有内容都会按预期工作。

摘要:
SendKeys仅在第一个标签聚焦时才有效。
我正在使用selenium webdriver:v2.48.1。

3 个答案:

答案 0 :(得分:0)

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

public void NavigateToBrowsersTabByNumber(int n) { ArrayList tabs = new ArrayList (driver.getWindowHandles()); driver.switchTo().window(tabs.get(n-1)); }

答案 1 :(得分:0)

第一个打开的标签应自动具有焦点。但是,如果它不是出于某种原因,你可以手动添加焦点,然后使用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);

答案 2 :(得分:0)

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

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