我们这里有一个遗留的远程系统,没有webapi,webservice等…, 那么我们需要通过Selenium进行集成。 我们需要从一个主选项卡中打开多个选项卡来进行提取,但是当更改为所需的选项卡并通过css选择器获取值时,它总是从fisrt选项卡中获得结果。 我们的系统无法在互联网上打开,然后我以Google为例进行了相同的操作,发生了相同的行为。是错误还是我的错?有人可以看到出什么问题了吗? 下面是没有错误检查的简化版本,其最小代码。 非常感谢。
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 }
WebDriver不会自动将焦点切换到新窗口或选项卡,因此我们必须告诉它何时进行切换。
要切换到新窗口/标签,请尝试:
driver.SwitchTo().Window(driver.WindowHandles.Last());
然后,在新选项卡上完成后,将其关闭并切换回主窗口:
driver.Close(); driver.SwitchTo().Window(driver.WindowHandles.First());
然后,您可以从这里继续测试。
我将添加一个快速免责声明,即我目前正在使用的计算机上未安装Visual Studio,并且尚未测试上面的代码。但是,这应该可以引导您正确的方向。
编辑:再次查看您的代码,上面的示例将替换SendKeys()调用以尝试切换选项卡焦点:
SendKeys()
IWebElement elmBdy = driver.FindElement(By.CssSelector("body")); elmBdy.SendKeys(Keys.Control + "2");