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.

37
demandé sur Andrii Omelchenko 2012-07-16 15:54:49

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
51
répondu Petr Janeček 2012-07-20 08:48:18

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);

9
répondu Robert P 2016-01-16 19:26:22

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

9
répondu Hari Reddy 2017-08-10 11:55:43

Vous pouvez essayer ceci:

driver.findElement(By.xpath(id("anything")).sendKeys(Keys.CONTROL + "a");
4
répondu Harish Gautham 2015-09-30 08:18:40

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();
    }
}
3
répondu DeafJoe 2017-08-10 11:56:20

Pour Python:

ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform();
1
répondu Raunak Thomas 2018-06-02 09:39:50
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.

0
répondu Revanth Kumar 2016-01-07 22:42:39

j'ai trouvé qu'en ruby, vous pouvez passer deux arguments send_keys

Comme ceci:

element.send_keys(:control, 'A')

0
répondu C Johnson 2016-05-02 19:20:01

Ç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();
0
répondu Abhishek Kashyap 2016-05-07 16:22:42

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.

0
répondu Calin Popita 2016-09-29 13:11:23

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);
    }
}
0
répondu G.V.K.RAO 2017-01-20 06:28:07

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;'

0
répondu Bandham Manikanta 2017-11-07 12:50:39