2012-07-16 84 views
36

我需要按Ctrl + A使用Selenium WebDriver的按鍵。有什麼辦法可以做到嗎?我檢查了Selenium庫,發現Selenium只允許按下特殊鍵和功能鍵。按下按鍵(Ctrl + A)Selenium WebDriver

+0

您可以得到答案:http://stackoverflow.com/questions/11578768/press -ctrla-to-select-all-content-in-a-page-by-webdriver – 2013-04-01 07:22:58

回答

49

還有一個解決方案(在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()方法。因此,哈日雷迪的建議,你將不得不使用Selenium高級用戶交互的API,見ActionBuilder

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

和絃方法很有趣,很好的答案。 – 2012-07-17 05:02:35

+1

我錯過了通過語言講述。我使用紅寶石硒 – AJJ 2012-07-20 04:55:49

+2

@Jai編輯與紅寶石銘記。 – 2012-07-20 08:48:44

3

由於Ctrl鍵 + 映射到的ASCII碼值1(Ctrl鍵 + 至2,至多,Ctrl鍵 + Ž至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(); 
    } 
} 
9

要點擊按Ctrl + 一個,你可以用操作

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

不要忘記擁有CONTROL KEY的keyUp,否則在將來的測試中會出現奇怪的錯誤。 – Chexpir 2015-06-02 16:09:10

4

你可以試試這個:

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

謝謝你,幫我爲我的Python應用程序,使用'driver.send_keys(Keys.TAB)' – ntk4 2017-09-13 05:08:42

0
WebDriver driver = new FirefoxDriver(); 

Actions action = new Actions(driver); 

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

這種方法去除多餘的調用(String.ValueOf())將unicode轉換爲字符串。

9

在用於C#的Selenium中,發送Keys.Control只需切換控件控件的狀態:如果它啓動,則它變爲關閉;如果它下降了,那麼它就會上升。所以要模擬按下Control + A,發送Keys.Control兩次,一次發送之前發送「a」,然後發送。

例如,如果我們是輸入IWebElement,下面的語句將選擇其中的所有內容:

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

+0

謝謝。我一直在尋找這個。 – 2016-05-22 21:16:43

+0

太好了。通過使用您的評論,在使用Rselenium的R lang中,我也得到了Control + A的結果。在這種情況下,我不得不鍵入:'$頁sendKeysToActiveElement(列表(鍵=「控制」,「一」,鍵=「控制」))' – Jalles10 2017-12-02 12:36:13

0

我發現,在Ruby中,你可以通過兩個參數send_keys

像這樣:

element.send_keys(:control, 'A')

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

通過在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); 
    } 
} 
+0

RB指的是機器人?你初始化rb的地方? :) – Csanesz 2016-11-19 21:45:06

+0

@Csanesz:是的,rb是Robot的實例 – 2017-01-20 06:29:06

+1

您可以將Robot初始化爲:Robot rb = new Robot(); – 2017-01-20 06:37:15

0

這是用C#(VS2015)硒什麼工作對我來說:

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

你可以使用(+)添加儘可能多的按鍵。

0

的Java

Robot類的工作將非常有效地通過比硒的SendKeys發送鍵。請嘗試

例:

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

使用上述機器人類,你需要import java.awt.Robot;'