web-dev-qa-db-fra.com

Tasto Premuto (Ctrl + A) Sélénium WebDriver

Ho bisogno di premereCtrl+Anous utilisons Selenium WebDriver. c'è qualche modo pour farlo? Contrôlez la bibliothèque Sélénium et sélectionnez le Sélénium composé des soles pressées des goûts spéciaux.

44
AJJ

Une solution supplémentaire (en Java, car vous ne nous avez pas indiqué 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 l'utiliser pour sélectionner le texte entier dans un <input> ou sur la page entière (il suffit de rechercher l'élément html et de le lui envoyer).


EDIT - après que OP ait indiqué qu'il utilisait des liaisons Selenium Ruby

Il n'y a pas de méthode chord() dans la classe Keys in Ruby. Par conséquent, comme suggéré par Hari Reddy, vous devrez utiliser l'API d'interactions utilisateur Selenium Advanced, voir ActionBuilder :

driver.action.key_down(:control)
             .send_keys("a")
             .key_up(:control)
             .perform
55
Petr Janeček

CliccareCtrl+Apuoi farlo con le azioni

  Actions action = new Actions(); 
  action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform();

\ u0061 rappresenta il carattere 'a'

\ u0041 rappresenta il carattere 'A'

Par défaut, les chiffres sont faibles Unicode - http://unicode.org/charts/PDF/U0000.pdf

10
Hari Reddy

Vous pouvez essayer ceci:

driver.findElement(By.xpath(id("anything")).sendKeys(Keys.CONTROL + "a");
4
Harish Gautham

DaCtrl+Amappa a ASCII codice 1 (Ctrl+Bun 2, une finCtrl+Zun 26).

Provare:

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
DeafJoe

Pour Python:

ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform();
2
Raunak Thomas

Java

La classe de robot fonctionnera de manière très efficace par rapport à l'envoi des clés via les sendkeys de Selenium. S'il vous plaît essayez

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

1

La réponse la plus simple en C # (si vous êtes enclin à C #).

Actions action = new Actions(); 
action.KeyDown(OpenQA.Selenium.Keys.Control).SendKeys("a").KeyUp(OpenQA.Selenium.Keys.Control).perform();

Hari Reddy a presque donné cette réponse ci-dessus, mais j'ai corrigé le cas où il s'était trompé sur certains mots clés, ajouté KeyUp ou vous vous retrouvez dans un désordre en laissant la touche de contrôle enfoncée, j'ai également ajouté la clarification concernant OpenQA. Selenium.Keys parce que vous utilisez peut-être aussi Windows.Forms sur la même classe que celle que j’étais demandait cette clarté. Enfin, je tape "a" car j’ai trouvé que c’était le moyen le plus simple et je ne vois aucune suggestion de la part du PO de ne pas vouloir la réponse la plus simple.

Merci beaucoup à Hari Reddy car j'étais novice dans l'utilisation de la classe Actions et j'écrivais beaucoup de commandes différentes, en les enchaînant comme il l'a montré est plus rapide :-)

1
Ewan

C'est ce qui a fonctionné pour moi en utilisant C # (VS2015) avec Selenium:

new Actions(driver).SendKeys(Keys.Control+"A").Perform();

Vous pouvez ajouter autant de clés que vous le souhaitez en utilisant (+) entre les deux.

0
Calin Popita
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
Revanth Kumar
Actions act = new Actions(driver);
act.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).build().perform();
0
Athmeeya Gowda

Ça marche 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

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
G.V.K.RAO