Selenium Web驱动程序:findElement(By.name .....和无头浏览器

时间:2015-06-12 09:19:46

标签: java selenium selenium-webdriver webdriver headless-browser

我试图遵循Selenium Webdrive教程

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

有一个简单的测试,这里是您的步骤:

  1. 打开网页http://google.com

  2. 获取页面标题。

  3. 搜索'Selenium'

  4. 再次检查页面标题。

  5. 从类代码示例开始,这里是您的代码

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

    尝试执行它我发现以下错误

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

    没有打印页面名称:????? 似乎" q"找不到页面中的元素。 ????

    我已经使用Firebug进行了检查,似乎是" q"元素在代码中(在下面的snipplet代码中查找name =" q")

    <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">
    

    我在Windows 7上使用Eclipse Luna

    有什么建议吗?提前谢谢你......

    切萨雷

4 个答案:

答案 0 :(得分:2)

我已经解决了......我在组织中代理了一个代理,所以我要设置代理。

我发现了这个:HtmlUnitDriver does not appear to be loading page

查看FunThomas424242评论并观看此链接https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/htmlunit/HtmlUnitDriver.html

所以正确的代码如下:

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

   }
}

“核心”行如下

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

您需要使用代理配置进行更新。

答案 1 :(得分:1)

使用xpath代替名称。

尝试使用此代码:

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

对于搜索按钮,请单击:

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

    // Click the button
    button.click();

答案 2 :(得分:1)

我的工作正常,并将页面标题打印为“Google”。虽然它在“找到搜索按钮”代码时给了我错误。

Unable to locate element with name: gbqfba

错误似乎与您的网址有关,因为我猜测驱动程序没有将网址带到地址栏中,因此无法导航到www.google.com网页。这就是驱动程序无法打印页面标题并找到名为“q”的搜索编辑框的原因。

这通常是由于与浏览器和selenium jar文件相关的兼容性问题。更新jar文件或降级浏览器可能会解决此问题。

答案 3 :(得分:0)

您可以尝试将xpath与//*[@id='sb_ifc0']

一起使用