java Selenium Web Driver:findElement(By.name...和無頭瀏覽器




selenium-webdriver webdriver (4)

它在我的最後工作正常,並將頁面的標題打印為“Google”。 雖然它給了我錯誤的'找到搜索按鈕'的代碼。

Unable to locate element with name: gbqfba

該錯誤似乎與您的網址的某處,我可以猜測的是,驅動程序不會將網址到地址欄,因此,不導航到www.google.com網頁。 這就是驅動程序無法打印頁面標題並找到名稱為“q”的搜索編輯框的原因。

這通常是由於與瀏覽器和硒jar文件相關的兼容性問題。 更新jar文件或降級瀏覽器可以解決這個問題。

我正在嘗試遵循Selenium Webdrive教程

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

有一個簡單的測試,在這裡你是步驟:

  1. 打開網頁http://google.com

  2. 獲取頁面的標題。

  3. 搜索“Selenium”

  4. 再次檢查頁面的標題。

從類代碼示例開始,這裡是我的代碼

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

有什麼建議麼? 先謝謝你 ...

切薩雷


Answer #1

我解決了....我在我的組織後面的代理,所以我必須設置代理。

我發現這個: HtmlUnitDriver似乎不是加載頁面

尋找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);

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


Answer #2

你可以嘗試使用xpath和//*[@id='sb_ifc0']


Answer #3

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






headless-browser