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で新しいタブが開きませんか?
答えてくれてありがとう! JavaScriptでやりました。
((IJavaScriptExecutor)driver).ExecuteScript("window.open();");
chromeドライバーの「機能」のようです。
https://bugs.chromium.org/p/chromedriver/issues/detail?id=581
これは、ChromeDriverでキーボード入力をシミュレートする方法の制限です。キーは、ブラウザプロセスをバイパスして、レンダリングプロセスに直接送信されます。したがって、ブラウザプロセスのキーボードショートカットハンドラは、sendKeys()によって呼び出されません。
これを試して
driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
driver.SwitchTo().Window(driver.WindowHandles.Last());
driver.Navigate().GoToUrl("http://www.google.com")
Macを使用している場合は、Keys.Controlの代わりにKeys.Commandを使用します。
body.SendKeys(Keys.Command + "t");