java - chrome - Controlador Web Selenium: findElement(By.name... y navegador sin cabeza
selenium headless chrome (4)
Intento seguir el tutorial Selenium Webdrive
http://www.toolsqa.com/selenium-webdriver/headless-browser-testing-selenium-webdriver/
Hay una prueba simple, aquí están los pasos:
Abrir página web http://google.com
Obtener el título de la página.
Búsqueda de ''Selenio''
Comprueba el título de la página nuevamente.
A partir de la muestra del código de clase, aquí está mi código
package headlessBrowser;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class TestOne {
public static void main(String[] args) {
// Declaring and initialising the HtmlUnitWebDriver
HtmlUnitDriver unitDriver = new HtmlUnitDriver();
// open google.com webpage
unitDriver.get("http://google.com");
System.out.println("Title of the page is -> " + unitDriver.getTitle());
// find the search edit box on the google page
WebElement searchBox = unitDriver.findElement(By.name("q"));
// type in Selenium
searchBox.sendKeys("Selenium");
// find the search button
WebElement button = unitDriver.findElement(By.name("gbqfba"));
// Click the button
button.click();
System.out.println("Title of the page is -> " + unitDriver.getTitle());
}
}
Intentando ejecutarlo, tengo el siguiente error
Title of the page is ->
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element with name: q
No se imprime el nombre de la página: ????? Parece que el elemento "q" en la página no se encuentra. ????
Lo he comprobado con Firebug y parece que el elemento "q" está en el código (busque el nombre = "q" en el siguiente código snipplet ...)
<input spellcheck="false" dir="ltr" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; background: transparent url("data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D") repeat scroll 0% 0%; position: absolute; z-index: 6; left: 0px; outline: medium none;" aria-autocomplete="both" role="combobox" aria-haspopup="false" class="gsfi" id="lst-ib" maxlength="2048" name="q" autocomplete="off" title="Cerca" value="" aria-label="Cerca" type="text">
Estoy usando Eclipse Luna en Windows 7
¿Alguna sugerencia? Gracias de antemano ...
Cesare
Está funcionando bien en mi lado e imprimiendo el título de página como ''Google''. Aunque me dio error en el código ''encontrar el botón de búsqueda''.
Unable to locate element with name: gbqfba
El error parece estar en algún lugar con su URL, ya que lo que puedo adivinar es que el controlador no está llevando la URL a la barra de direcciones y, por lo tanto, no está navegando a la página web de www.google.com. Esa es la razón por la cual el controlador no puede imprimir el título de la página y encuentra el cuadro de edición de búsqueda con el nombre ''q''.
Esto generalmente ocurre debido a problemas de compatibilidad relacionados con los navegadores y el archivo jar de selenio. La actualización de los archivos jar o la degradación del navegador pueden resolver este problema.
Use xpath en lugar de name.
intenta usar este código:
WebElement searchBox = unitDriver.findElement(By.xpath("//input[@name=''q'']"));
Para el botón de búsqueda, haga clic en:
// find the search button
WebElement button = unitDriver.findElement(By.xpath("//input[@value=''Google Search'']"));
// Click the button
button.click();
puedes intentar usar usando xpath con //*[@id=''sb_ifc0'']
Lo he solucionado ... Estoy detrás de un proxy en mi organización, así que tengo que configurar el Proxy.
He encontrado esto: HtmlUnitDriver no parece estar cargando la página .
Busque el comentario de FunThomas424242 y mire este enlace https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/htmlunit/HtmlUnitDriver.html
Entonces el código correcto es el siguiente:
package headlessBrowser;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class TestOne {
public static void main(String[] args) {
// Declaring and initialising the HtmlUnitWebDriver
HtmlUnitDriver unitDriver = new HtmlUnitDriver();
// Necessary set Proxy if you''re behind it !!!!
unitDriver.setProxy("proxy.YOUR-ORGANIZATION.COM", XXXX);
// open google.com webpage
unitDriver.get("http://www.google.com");
System.out.println("Title of the page is -> " + unitDriver.getTitle());
// find the search edit box on the google page
WebElement searchBox = unitDriver.findElement(By.name("q"));
// type in Selenium
searchBox.sendKeys("Selenium");
// find the search button
WebElement button = unitDriver.findElement(By.name("btnG"));
// Click the button
button.click();
System.out.println("Title of the page is -> " + unitDriver.getTitle());
}
}
Las filas "centrales" son las siguientes
// Necessary set Proxy if you''re behind it !!!!
unitDriver.setProxy("proxy.YOUR-ORGANIZATION.COM", XXXX);
donde tienes que actualizar con tu configuración de proxy.