Selenium:在新窗口中打开元素c#

时间:2017-07-18 07:59:58

标签: c# html selenium selenium-webdriver

我正在使用铬和硒。 我的代码假设要打开一个链接,并且在该链接上,它假设在新页面上打开其他可点击的项目。为此,我创建了一个动作。当它k==4时,它会打开一个新窗口,执行某些操作并关闭驱动程序。我写的Action只适用一次。当k==5时,它使用主驱动程序并关闭主驱动程序。

for (int k = 4; k < 100; k++) // i do not know how many elements contain
{
    try
    {
        Thread.Sleep(300);
        Actions action = new Actions(secondDriver);
        IWebElement linkInbox = secondDriver.FindElement(By.XPath(element));
        action.KeyDown(Keys.Shift).Click(linkInbox).Perform();
        secondDriver.SwitchTo().Window(secondDriver.WindowHandles.Last());
    }
    catch (Exception)
    {
        Thread.Sleep(500);
    }
    Thread.Sleep(500);
    secondDriver.Close();
    secondDriver.SwitchTo().Window(secondDriver.WindowHandles.First());
}

编辑1:没有使用操作,是否有任何Ijavascriptexecutor解决方案?

1 个答案:

答案 0 :(得分:0)

我认为您只需要存储CurrentWindowHandle并在需要切换时使用它。至于 Shift + 点击,我认为你最好在点击它之前使用JSExecutor向链接添加属性target='_blank'。 / p>

string mainWindowHandle = secondDriver.CurrentWindowHandle;
for (int k = 4; k < 100; k++) // i do not know how many elements contain
{
  try
  {
    Thread.Sleep(300);
    IWebElement linkInbox = secondDriver.FindElement(By.XPath(element));
    var script = "arguments[0].setAttribute('target','_blank');"
    ((IJavaScriptExecutor)secondDriver).ExecuteScript(script, linkInbox);
    Thread.Sleep(1000);
    linkInbox.Click();
    Thread.Sleep(1000);
    secondDriver.SwitchTo().Window(secondDriver.WindowHandles.Last());
    // do the thing here

    Thread.Sleep(500);
    secondDriver.Close();
    secondDriver.SwitchTo().Window(mainWindowHandle);
  catch (Exception)
  {
    Thread.Sleep(500);
  }
  if(secondDriver.WindowHandles.Count()>1)
  {
    secondDriver.SwitchTo().Window(secondDriver.WindowHandles.Last()).Close();
    secondDriver.SwitchTo().Window(mainWindowHandle);
  }

}