按(Ctrl + A)Selenium WebDriver

我需要使用Selenium WebDriver按Ctrl + A键。 有没有办法做到这一点? 我检查了Selenium库,发现Selenium只允许按下特殊键和function键。

还有一个解决scheme(在Java中,因为你没有告诉我们你的语言 – 但是在Keys类的所有语言中都是这样的):

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

你可以用它来在<input>或整个页面上select整个文本(只要findhtml元素并发送给它)。


编辑 – OP后表示,他使用Selenium Ruby绑定

在Ruby绑定的Keys类中没有chord()方法。 因此,正如Hari Reddy所build议的那样,您将不得不使用Selenium高级用户交互API,请参阅ActionBuilder

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

要点击Ctrl + A ,你可以用Actions来完成

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

\ u0061表示字符'a'

\ u0041代表人物“A”

要按其他字符,请参考unicode字符表 – charts/PDF/U0000.pdf

在Selenium for C#中,发送Keys.Control只需切换控制键的状态:如果启动,则变为closures; 如果它下来,那就变成了 所以要模拟按Ctrl + A ,发送Keys.Control两次,在发送“a”之前,然后之后。

例如,如果我们是一个inputIWebElement,下面的语句将select它的所有内容:

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

你可以试试这个:

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

由于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(); } } 
 WebDriver driver = new FirefoxDriver(); Actions action = new Actions(driver); action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform(); 

此方法删除额外的调用(String.ValueOf())将unicode转换为string。

我发现在ruby中,你可以传递两个参数给send_keys

喜欢这个:

element.send_keys(:control, 'A')

这个对我有用:

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

这对于我在Selenium中使用C#(VS2015)

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

您可以使用(+)添加尽可能多的按键。

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

java的

Robot类将比通过selenium sendkeys发送密钥的效率更高。 请尝试

例如:

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

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