Selenium从另一个选项卡而不是活动选项卡获取数据

时间:2015-12-23 01:55:48

标签: c# firefox selenium selenium-webdriver

我们这里有一个传统的远程系统,没有webapi,webservice,...
然后我们需要通过Selenium进行整合 我们需要从一个主选项卡打开多个选项卡来进行提取,但是当更改为所需选项卡并通过css选择器获取值时,它始终会从fisrt选项卡获得结果。
我们的系统无法在互联网上打开,然后我以谷歌为例做同样的行为。 这是一个错误还是我的错?有人可以看到什么是错的?
下面是一个没有错误检查的简化版本,它的最小代码 非常感谢。

public static void testab()
{
    IWebDriver driver = new FirefoxDriver();
    driver.Navigate().GoToUrl("https://www.google.com/ncr");
    IWebElement elmTxt = driver.FindElement(By.CssSelector("input#lst-ib"));
    elmTxt.SendKeys("google" + Keys.Enter);
    IWebElement elmQtdRes = driver.FindElement(By.CssSelector("div#resultStats"));
    string strWebStat = elmQtdRes.Text;
    IWebElement elmNewsLnk = driver.FindElement(By.CssSelector("a[href*='tbm=nws']"));
    elmNewsLnk.SendKeys(Keys.Control + Keys.Return);
    IWebElement elmBdy = driver.FindElement(By.CssSelector("body"));
    elmBdy.SendKeys(Keys.Control + "2");
    elmQtdRes = driver.FindElement(By.CssSelector("div#resultStats"));
    string strNewStat = elmQtdRes.Text;
    Console.WriteLine("Stat for WEB:[" + strWebStat + "]"); // prints stat for web - OK
    Console.WriteLine("Stat for NEWS:[" + strNewStat + "]"); // prints stat for web - WRONG
}

1 个答案:

答案 0 :(得分:2)

WebDriver不会自动将焦点切换到新窗口或标签,因此我们必须告诉它何时进行切换。

要切换到新窗口/标签,请尝试:

driver.SwitchTo().Window(driver.WindowHandles.Last());

然后,在完成新选项卡后,关闭它并切换回主窗口:

driver.Close();
driver.SwitchTo().Window(driver.WindowHandles.First());

然后从这里开始,你可以继续测试。

我将添加一个快速免责声明,表示我目前尚未使用Visual Studio安装Visual Studio,并且尚未对上述代码进行测试。但是,这应该让你朝着正确的方向前进。

编辑:第二次查看您的代码,上面的示例将替换SendKeys()调用以尝试切换标签焦点:

IWebElement elmBdy = driver.FindElement(By.CssSelector("body"));
elmBdy.SendKeys(Keys.Control + "2");