web-dev-qa-db-ja.com

Selenium C#新しいタブを開くCTRL + T CHROME

static void Main()
{
    IWebDriver driver = new ChromeDriver();
    driver.Navigate().GoToUrl("http://google.com");
    IWebElement body = driver.FindElement(By.TagName("body"));

    body.SendKeys(Keys.Control + "t");

}

これは私が新しいタブを開くために使用しようとしているコードですが、機能しません。エラーは発生しません。ドライバーはGoogleを開きます。それだけです。たくさん検索して、ビデオでさえ多くのチュートリアルを見つけました。人々がまったく同じコードを使用していて、それは彼らのために機能しますが、私にとってはそうではなく、私はそれを理解することができません...

Keys.Shift + "t"を検索フィールドに送信してみましたが、機能し、フィールドに大文字のTが書き込まれます。

私も試しました

Actions act = new Actions(driver);
act.KeyDown(Keys.Control).SendKeys("t").Perform();

それでも機能しませんが、Keys.ControlをKeys.Shiftに変更すると、Keys.Controlが機能しているように見えます。

編集:IEドライバーでコードを実行しようとしましたが、そこで動作しました。新しいタブが開きますが、Chromeで新しいタブが開きませんか?

9
Darkbound

答えてくれてありがとう! JavaScriptでやりました。

((IJavaScriptExecutor)driver).ExecuteScript("window.open();");
11
Darkbound

chromeドライバーの「機能」のようです。

https://bugs.chromium.org/p/chromedriver/issues/detail?id=581

これは、ChromeDriverでキーボード入力をシミュレートする方法の制限です。キーは、ブラウザプロセスをバイパスして、レンダリングプロセスに直接送信されます。したがって、ブラウザプロセスのキーボードショートカットハンドラは、sendKeys()によって呼び出されません。

5
Sunshine

これを試して

driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
driver.SwitchTo().Window(driver.WindowHandles.Last());
driver.Navigate().GoToUrl("http://www.google.com")
1
Jordan Benyon

Macを使用している場合は、Keys.Controlの代わりにKeys.Commandを使用します。

body.SendKeys(Keys.Command + "t");
0
Rushby