按键(Ctrl + A)Selenium WebDriver

时间:2012-07-16 11:54:50

标签: selenium keypress

我需要使用Selenium WebDriver按 Ctrl + A 键。有什么办法吗?我检查了Selenium库,发现Selenium只允许按下特殊键和功能键。

14 个答案:

答案 0 :(得分:56)

另一个解决方案(在Java中,因为您没有告诉我们您的语言 - 但它在Keys类的所有语言中的工作方式相同):

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

您可以使用此选项在<input>或整个页面中选择整个文本(只需找到html元素并将其发送给它)。


编辑 - OP表示他正在使用Selenium Ruby绑定

Ruby绑定中的Keys class中没有chord()方法。因此,正如Hari Reddy所建议的那样,您必须使用Selenium Advanced用户互动API,请参阅ActionBuilder

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

答案 1 :(得分:10)

要点击 Ctrl + A ,您可以使用操作

执行此操作
  Actions action = new Actions(); 
  action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform();

\ u0061表示字符'a'

\ u0041表示字符'A'

要按其他字符,请参阅unicode字符表 - http://unicode.org/charts/PDF/U0000.pdf

答案 2 :(得分:9)

在Selenium for C#中,发送Keys.Control只是简单地切换控制键的状态:如果它已经启动,那么它就会失效;如果它失效了,它就会变好。因此,要模拟按控制+ A ,请在发送&#34; a&#34;之前发送Keys.Control两次。之后。

例如,如果我们是输入IWebElement,则以下语句将选择其所有内容:

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

答案 3 :(得分:4)

你可以试试这个:

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

答案 4 :(得分:3)

由于 Ctrl + A 映射到ASCII码值1( Ctrl + B 到2,最多, Ctrl + Z 至26)。

尝试:

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

答案 5 :(得分:2)

对于Python:

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

答案 6 :(得分:1)

的java

Robot类比通过selenium sendkeys发送密钥更有效。请尝试

例如:

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

要使用上述机器人类,您需要import java.awt.Robot;'

答案 7 :(得分:1)

最简单的C#答案(如果您倾向于C#)。

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

这个答案几乎是由Hari Reddy给出的,但是我已经解决了他在某些关键字上输入错误的情况,添加了KeyUp或您一团糟将控制键放下,我还添加了说明在OpenQA.Selenium.Keys上使用,因为您可能也需要在与我相同的类上使用Windows.Forms。最后,我键入“ a”,因为我发现这是最简单的方法,并且我从OP中看不到他们不想要最简单答案的建议。

非常感谢Hari Reddy,因为我是Actions类用法的新手,而且我编写了许多不同的命令,将它们链接在一起的方式更加快捷:-)

答案 8 :(得分:0)

WebDriver driver = new FirefoxDriver();

Actions action = new Actions(driver); 

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

此方法删除额外调用(String.ValueOf())以将unicode转换为字符串。

答案 9 :(得分:0)

我发现在ruby中,你可以将两个参数传递给<!DOCTYPE html> <html> <head> <meta content="text/html; charset=windows-1252" http-equiv="content- type"> <title></title> <style type="text/css"> ul {list-style: none;padding: 0px;margin: 0px;} ul li {display: block;position: relative;float: left;border:1px solid #000} li ul {display: none;} ul li a {display: block;background: #000;padding: 5px 10px 5px 10px;text-decoration: none; white-space: nowrap;color: #fff;} ul li a:hover {background: #f00;} li:hover ul {display: block; position: absolute;} li:hover li {float: none;} li:hover a {background: #f00;} li:hover li a:hover {background: #000;} #drop-nav li ul li {border-top: 0px;} </style></head> <body> <ul id="drop-nav"> <li><a href="#">Support</a></li> <li><a href="#">Web Design</a> <ul> <li><a href="#">HTML</a></li> <li><a href="#">CSS</a></li> <li><a href="#">JavaScript</a></li> </ul> </li> <li><a href="#">Content Management</a> <ul> <li><a href="#">Joomla</a></li> <li><a href="#">Drupal</a></li> <li><a href="#">WordPress</a></li> <li><a href="#">Concrete 5</a></li> </ul> </li> <li><a href="#">Contact</a> <ul> <li><a href="#">General Inquiries</a></li> <li><a href="#">Ask me a Question</a></li> </ul> </li> </ul> <br> <br> <br> <ol> <li style="list-style-type: disc;"><a href="www.google.com">link1</a></li> <li style="list-style-type: disc;"><a href="www.yahoo.com">link2</a></li> </ol> </body> </html>

像这样:

send_keys

答案 10 :(得分:0)

它对我有用:

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 :(得分:0)

在Java中使用Robot类:

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 :(得分:0)

这对我使用C#(VS2015)和Selenium有用:

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

您可以在中间使用(+)添加任意数量的键。

答案 13 :(得分:0)

Actions act = new Actions(driver);
act.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).build().perform();