我需要使用Selenium WebDriver按 Ctrl + A 键。有什么办法吗?我检查了Selenium库,发现Selenium只允许按下特殊键和功能键。
答案 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)
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();