我当前的 C# 代码会打开一个窗口,然后单击按钮后导航到指定的 URL。
protected void onboardButton_Click(object sender, EventArgs e)
{
IWebDriver driver = new ChromeDriver();
driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
driver.Navigate().GoToUrl("http://www.google.com")
}
但是我计划导航到的网站具有单点登录。如何在我的现有浏览器会话中打开一个新选项卡并从那里导航?上面的代码似乎不起作用。
发送
Keys.Control + "t"
对我来说不起作用。我必须用 javascript 来做,然后切换到它。
((IJavaScriptExecutor)driver).ExecuteScript("window.open();");
driver.SwitchTo().Window(driver.WindowHandles.Last());
要处理新选项卡,您应该先切换到它。尝试以下操作:
driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
driver.SwitchTo().Window(driver.WindowHandles.Last());
driver.Navigate().GoToUrl("http://www.google.com")
您可能还需要切换回来:
driver.SwitchTo().Window(driver.WindowHandles.First());
解决方案非常简单:
Driver.SwitchTo().NewWindow(WindowType.Tab);
享受...
这可能不起作用:
driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
替代方案:查找目标为空白的可点击元素(在页面的后续代码中搜索“空白”)。这将打开新选项卡。
而不是在选项卡之间切换(感谢@Andersson):
driver.SwitchTo().Window(driver.WindowHandles.Last());
driver.SwitchTo().Window(driver.WindowHandles.First());
我们可以模拟
Ctrl
+ Element Click
Actions action = new Actions(_driver);
action.KeyDown(Keys.Control).MoveToElement(body).Click().Perform();
Dim js As IJavaScriptExecutor = TryCast(driver, IJavaScriptExecutor)
js.ExecuteScript("window.open()")
driver.SwitchTo().Window(driver.WindowHandles.Last())
IWebDriver driver = new ChromeDriver();
将其更改为:
var driver = new ChromeDriver();
我不知道为什么。可能是 IWebDriver 错过了该方法。