Selenium Web Driver: findElement(By.name … and headless browser

折月煮酒 提交于 2019-12-20 04:59:14

问题


I'm trying to follow the Selenium Webdrive Tutorial

http://www.toolsqa.com/selenium-webdriver/headless-browser-testing-selenium-webdriver/

There is a simple test, here you are the steps:

  1. Open webpage http://google.com

  2. Get the title of the page.

  3. Search for ‘Selenium’

  4. Check the title of the page again.

Starting from the class code sample, here you are my code

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

   }
}

Trying to execute it I've the following error

Title of the page is -> 
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element with name: q

No page name is printed: ????? It seems that the "q" element in the page is not found. ????

I've checked with Firebug and seems that the "q" element there is in the code (look for name="q" in the following snipplet code ...)

<input spellcheck="false" dir="ltr" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; background: transparent url(&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D&quot;) 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">

I'm using Eclipse Luna on Windows 7

Any suggestions? Thank you in advance ...

Cesare


回答1:


I've solved .... I'm behind a proxy in my organization so I've to set Proxy.

I've found this: HtmlUnitDriver does not appear to be loading page.

Look for FunThomas424242 comment and watch this link https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/htmlunit/HtmlUnitDriver.html

So the right code is the follow:

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

   }
}

The "core" rows are the following

    // Necessary set Proxy if you're behind it !!!! 
    unitDriver.setProxy("proxy.YOUR-ORGANIZATION.COM", XXXX);

where you've to update with your proxy configuration.




回答2:


Use xpath instead of name.

try to use this code:

  WebElement searchBox = unitDriver.findElement(By.xpath("//input[@name='q']"));

For search button click:

    // find the search button
    WebElement button = unitDriver.findElement(By.xpath("//input[@value='Google Search']"));

    // Click the button
    button.click();



回答3:


It is working fine at my end and printing the title of page as 'Google'. Though it gave me error at 'find the search button' code.

Unable to locate element with name: gbqfba

The error seems to be somewhere with your URL as what I can guess is that the driver is not taking the URL into address bar and, hence, not navigating to www.google.com webpage. That's the reason the driver is unable to print the page title and find the search edit box with name 'q'.

This generally happens due to compatibility issue related to browsers and selenium jar file. Updating the jar files or downgrading the browser may solve this issue.




回答4:


you can try using using xpath with //*[@id='sb_ifc0']



来源:https://stackoverflow.com/questions/30799545/selenium-web-driver-findelementby-name-and-headless-browser

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!