web-dev-qa-db-ja.com

Seleniumを使用して、既存のブラウザーセッションで新しいタブを開く

以下の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")
}

しかし、私がナビゲートする予定のサイトにはシングルサインオンがあります。 既存のブラウザセッションで新しいタブを開き、そこから移動するにはどうすればよいですか?上記のコードは機能しないようです。

9
JPaulPunzalan

新しいタブを処理するには、最初に切り替える必要があります。以下を試してください:

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());
11
Andersson

送信 Keys.Control + "t"がうまくいきませんでした。私はjavascriptでそれをしなければならなかったし、それに切り替える必要がありました。

((IJavaScriptExecutor)driver).ExecuteScript("window.open();");
driver.SwitchTo().Window(driver.WindowHandles.Last());
5
nthpixel

これはうまくいかないかもしれません:

driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");

代替方法:ターゲットが空白のクリック可能な要素を検索します(ページのsurceコードで「空白」を検索します)。これにより、新しいタブが開きます。

タブを切り替えるより(@Anderssonに感謝):

driver.SwitchTo().Window(driver.WindowHandles.Last());
driver.SwitchTo().Window(driver.WindowHandles.First());
0
Atanas Atanasov