我正在使用铬和硒。
我的代码假设要打开一个链接,并且在该链接上,它假设在新页面上打开其他可点击的项目。为此,我创建了一个动作。当它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
解决方案?
答案 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);
}
}