web-dev-qa-db-fra.com

Selenium C # Ouvrir un nouvel onglet CTRL + T Ne fonctionne pas avec 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");

}

C’est le code que j’essaie d’utiliser pour ouvrir un nouvel onglet et il ne fonctionne pas. Je ne reçois aucune erreur. Le pilote ouvre Google et c’est tout .... J'ai beaucoup cherché et trouvé de nombreux tutoriels, même des vidéos où les gens utilisent exactement le même code et que cela fonctionne pour eux, mais pour moi cela ne fonctionne pas et je ne peux pas le comprendre ...

J'ai essayé d'envoyer Keys.Shift + "t" au champ de recherche et cela fonctionne, il écrit un T majuscule dans le champ

J'ai aussi essayé

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

Et cela ne fonctionne toujours pas, mais encore une fois si je change de Keys.Control en Keys.Shift écrit, ça ne ressemble à rien qui implique Keys.Control fonctionne !!

Edit: j'ai essayé d'exécuter le code avec un pilote IE et cela a fonctionné là-bas. Il ouvre un nouvel onglet, mais n'ouvre pas de nouveaux onglets sur Chrome?

7
Darkbound

Merci pour les réponses! Je l'ai fait avec JavaScript.

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

On dirait que c'est une "fonctionnalité" du pilote chromé.

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

Il s'agit d'une limitation dans la façon dont nous simulons la saisie au clavier dans ChromeDriver. Les clés sont envoyées directement au processus de rendu, en contournant le processus du navigateur. Donc, aucun gestionnaire de raccourci clavier dans le processus du navigateur ne sera appelé par sendKeys ().

4
Sunshine

Essaye ça 

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

Si vous êtes sur un Mac, utilisez Keys.Command au lieu de Keys.Control:

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