Подтвердить что ты не робот

Нажмите клавишу (Ctrl + A) Selenium WebDriver

Мне нужно нажать клавиши Ctrl + A, используя Selenium WebDriver. Есть ли способ сделать это? Я проверил библиотеки Selenium и обнаружил, что Selenium позволяет нажимать только специальные и функциональные клавиши.

4b9b3361

Ответ 1

Еще одно решение (в Java, потому что вы не сказали нам свой язык), но он работает одинаково на всех языках с классом Keys):

String selectAll = Keys.chord(Keys.CONTROL, "a");
driver.findElement(By.whatever("anything")).sendKeys(selectAll);

Вы можете использовать это, чтобы выбрать весь текст в <input> или на всей странице (просто найдите элемент html и отправьте его ему).


EDIT - после того, как OP заявила, что использует привязки Selenium Ruby

Нет метода chord() в Keys классе в привязках Ruby. Поэтому, как предложил Хари Редди, вам нужно будет использовать API взаимодействия с пользователем Selenium Advanced, см. ActionBuilder:

driver.action.key_down(:control)
             .send_keys("a")
             .key_up(:control)
             .perform

Ответ 2

Чтобы щелкнуть Ctrl + A, вы можете сделать это с помощью действий

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

\ u0061 представляет символ 'a'

\ u0041 представляет символ "A"

Чтобы нажать другие символы, см. таблицу символов Юникода - http://unicode.org/charts/PDF/U0000.pdf

Ответ 3

В Selenium для С# отправка Keys.Control просто переключает состояние Управление: если оно вверх, то оно становится недоступным; если он опустится, то он встанет. Чтобы имитировать нажатие Control + A, отправьте Keys.Control дважды, один раз перед отправкой "a", а затем после.

Например, если we является входным IWebElement, следующий оператор выберет все его содержимое:

we.SendKeys(Keys.Control + "a" + Keys.Control);

Ответ 4

Вы можете попробовать следующее:

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

Ответ 5

Так как Ctrl + A сопоставляется с кодовым значением ASCII 1 (Ctrl + B до 2, до, Ctrl + Z до 26).

Try:

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

Ответ 6

ява

Класс робота будет работать очень эффективно, чем отправка ключей через селеновые sendkeys. Попробуйте

Пример:

Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_A);

Чтобы использовать вышеуказанный класс робота, вам нужно import java.awt.Robot; '

Ответ 7

Для Python:

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

Ответ 8

WebDriver driver = new FirefoxDriver();

Actions action = new Actions(driver); 

action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();

Этот метод удаляет дополнительный вызов (String.ValueOf()) для преобразования unicode в строку.

Ответ 9

Я обнаружил, что в ruby ​​вы можете передать два аргумента в send_keys

Вот так:

element.send_keys(:control, 'A')

Ответ 10

Это работает для меня:

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

Ответ 11

Используя класс Robot в 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);
    }
}

Ответ 12

Это то, что сработало для меня с помощью С# (VS2015) с Selenium:

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

Вы можете добавить столько ключей, сколько захотите, используя (+) между ними.

Ответ 13

Самый простой ответ в С# (если вы склонны к С#).

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

Этот ответ почти уже дан выше Хари Редди, но я исправил случай, в котором он ошибся по некоторым ключевым словам, добавил KeyUp или вы попали в беспорядок, оставив клавишу управления нажатой, я также добавил пояснения по OpenQA. Ключи Selenium.Key, потому что вы также можете использовать Windows.Forms в том же классе, что и я, требуют этой ясности. Наконец, я набираю "а", потому что я нашел, что это самый простой способ, и я не вижу никаких предположений от ОП, что им не нужен самый простой ответ.

Большое спасибо Хари Редди, хотя я был новичком в использовании класса Actions, и я писал много разных команд, объединяя их в цепочку, как он показал, быстрее :-)