2012-07-16 133 views
36

que tiene que pulsar Ctrl + A teclas usando selenio WebDriver. ¿Hay alguna forma de hacerlo? Revisé las bibliotecas de Selenium y descubrí que el Selenium permite presionar teclas especiales y funcionales solo.pulsación de tecla (Ctrl + A) Selenio WebDriver

+0

Usted puede obtener la respuesta de: http://stackoverflow.com/questions/11578768/press -electro-a-seleccionar-todo-contenido-en-una-página-por-controlador-web –

Respuesta

49

Una de las soluciones más (en Java, porque no nos dijo su idioma - pero funciona de la misma manera en todos los idiomas con Keys clase):

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

Puede usar esto para seleccionar el texto completo en un <input>, o en la página completa (simplemente encuentre el elemento html y envíele esto).


EDITAR - OP después declaró que él está usando los enlaces de selenio Rubí

No hay chord() método en el Keys class en los enlaces de Ruby. Por lo tanto, según lo sugerido por Hari Reddy, que tendrá que utilizar selenio interacciones de usuario avanzada de la API, consulte ActionBuilder:

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

El método de acordes es interesante, buena respuesta. –

+1

me perdí para decir por idioma. Uso ruby ​​con selenio – AJJ

+2

@Jai Editado teniendo en cuenta a Ruby. –

3

Desde Ctrl + A mapas a ASCII valor de código 1 (Ctrl + B a 2, hasta, Ctrl + Z a 26).

Probar:

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

Para hacer clic Ctrl + Un, puede hacerlo con acciones

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

\ u0061 representa el carácter 'a'

\ u0041 representa el personaje 'A'

Presionar otros personajes hacen referencia la tabla de caracteres Unicode - http://unicode.org/charts/PDF/U0000.pdf

+2

No olvide tener la tecla MAYÚSCULA de la tecla CONTROL o tendrá errores extraños en futuras pruebas. – Chexpir

4

Usted podría intentar esto:

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

Gracias, esto me ayudó para mi aplicación python, usando 'driver.send_keys (Keys.TAB)' – ntk4

0
WebDriver driver = new FirefoxDriver(); 

Actions action = new Actions(driver); 

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

Este método elimina el extra llamar (String.ValueOf()) para convertir unicode en cadena.

9

En Selenium para C#, el envío de Keys.Control simplemente activa el estado de la tecla Control: si está activo, se vuelve inactivo; si está abajo, entonces sube. Para simular presionando Control + A, envíe Keys.Control dos veces, una vez antes de enviar "a" y luego.

Por ejemplo, si que es un IWebElement de entrada, la siguiente declaración seleccionará todo su contenido:

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

+0

Gracias. He estado buscando esto. –

+0

Genial. Al utilizar tu comentario, en Rang usando el Rselenium, también obtengo el resultado de Control + A. En este caso, tuve que escribir: 'page $ sendKeysToActiveElement (list (key = 'control'," a ", key = 'control'))' – Jalles10

0

me encontré con que en Ruby, puede pasar dos argumentos para send_keys

De esta manera:

element.send_keys(:control, 'A')

0

Funciona para mí:

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

Mediante el uso de la clase Robot en 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 significa robot? y donde inicializas rb? :) – Csanesz

+0

@Csanesz: Sí, rb es la instancia de Robot –

+1

Puede inicializar Robot como: Robot rb = nuevo Robot(); –

0

Esto es lo que funcionó para mí usando C# (VS2015) con Selenio:

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

Usted puede agregar tantas teclas como desee utilizando (+) entremedio.

0

java

clase Robot funcionará de manera muy eficiente que el envío de las claves a través SendKeys selenio. Por favor, intente

Ex:

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

utilizar la clase de robot anterior, es necesario import java.awt.Robot; '

Cuestiones relacionadas