Мне нужно нажать клавиши Ctrl + A, используя Selenium WebDriver. Есть ли способ сделать это? Я проверил библиотеки Selenium и обнаружил, что Selenium позволяет нажимать только специальные и функциональные клавиши.
Нажмите клавишу (Ctrl + A) Selenium WebDriver
Ответ 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, и я писал много разных команд, объединяя их в цепочку, как он показал, быстрее :-)