Presse clé dans (Ctrl+A) WebDriver Selenium
j'ai besoin d'appuyer sur Ctrl+ touches utilisant le WebDriver de sélénium. Est-il possible de le faire? J'ai vérifié les bibliothèques de sélénium et j'ai trouvé que le sélénium permet de presser des touches spéciales et fonctionnelles seulement.
12 réponses
une solution de plus (en Java, parce que vous ne nous avez pas dit votre langue - mais cela fonctionne de la même manière dans toutes les langues avec Keys
class):
String selectAll = Keys.chord(Keys.CONTROL, "a");
driver.findElement(By.whatever("anything")).sendKeys(selectAll);
vous pouvez utiliser ceci pour sélectionner le texte entier dans un <input>
, ou sur toute la page (il suffit de trouver le html
de l'élément et de l'envoyer à cela).
EDIT - après l'OP a déclaré qu'il est à l'aide de Sélénium Ruby liaisons
Il n'y a pas de chord()
méthode Keys
classe dans des reliures Rubis. Par conséquent, comme L'a suggéré Hari Reddy, vous devrez utiliser L'API interactions utilisateur avancées du sélénium, voir ActionBuilder
:
driver.action.key_down(:control)
.send_keys("a")
.key_up(:control)
.perform
En Sélénium pour C#, l'envoi d' Keys.Control
simplement bascule de l' Contrôle clé de l'état: si c'est en place, puis il devient bas; si elle est en bas, puis il devient. Ainsi, pour simuler la pression Contrôle+A, envoyer Keys.Control
deux fois, une fois avant d'envoyer "un" et puis après.
Par exemple, si nous est une entrée IWebElement, l'instruction suivante permet de sélectionner tous de son contenu:
we.SendKeys(Keys.Control + "a" + Keys.Control);
cliquez sur Ctrl+, vous pouvez le faire avec des Actions
Actions action = new Actions();
action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform();
\u0061 représente le caractère 'a'
\u0041 représente le caractère 'A'
appuyer sur d'autres caractères, reportez-vous à la table des caractères unicode - http://unicode.org/charts/PDF/U0000.pdf
Vous pouvez essayer ceci:
driver.findElement(By.xpath(id("anything")).sendKeys(Keys.CONTROL + "a");
Depuis Ctrl+ correspond à la valeur 1 du code ASCII ( Ctrl+B à 2, jusqu'à, Ctrl+Z à 26).
Essaie:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Internal;
using OpenQA.Selenium.Remote;
namespace SeleniumHqTest
{
class Test
{
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://localhost");
IWebElement el = driver.FindElement(By.Id("an_element_id"));
char c = '\u0001'; // ASCII code 1 for Ctrl-A
el.SendKeys(Convert.ToString(c));
driver.Quit();
}
}
Pour Python:
ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform();
WebDriver driver = new FirefoxDriver();
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();
cette méthode supprime l'appel supplémentaire ( String.ValueOf ()) pour convertir unicode en chaîne.
j'ai trouvé qu'en ruby, vous pouvez passer deux arguments send_keys
Comme ceci:
element.send_keys(:control, 'A')
Ça fonctionne pour moi:
OpenQA.Selenium.Interactions.Actions action
= new OpenQA.Selenium.Interactions.Actions(browser);
action.KeyDown(OpenQA.Selenium.Keys.Control)
.SendKeys("a").KeyUp(OpenQA.Selenium.Keys.Control).Perform();
C'est ce qui a fonctionné pour moi en utilisant C# (VS2015) avec le sélénium:
new Actions(driver).SendKeys(Keys.Control+"A").Perform();
Vous pouvez ajouter autant de touches que vous le souhaitez en utilisant (+) Inbet between.
en utilisant la classe Robot en Java:
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class Test1
{
public static void main(String[] args) throws Exception
{
WebDriver d1 = new FirefoxDriver();
d1.navigate().to("https://www.youtube.com/");
Thread.sleep(3000);
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
// Perform [Ctrl+A] Operation - it works
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_A);
Thread.sleep(3000);
}
}
java
la classe des robots fonctionnera très efficacement que l'envoi des clés à travers les sendkeys de sélénium. S'il vous plaît essayer
Ex:
Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_A);
pour utiliser la classe de robot ci-dessus, vous devez import java.awt.Robot;
'