2011-07-28 2 views
1

J'essaie d'exécuter un petit exemple d'application en utilisant HtmlUnitDriver dans Eclipse. Mon code est le suivant:Sélection d'éléments DOM dans WebDriver

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.htmlunit.HtmlUnitDriver; 

public class TestHtmlUnitDriver { 

    public static void main(String[] args) { 
     // Create a new instance of the html unit driver 
     // Notice that the remainder of the code relies on the interface, 
     // not the implementation. 

     WebDriver driver = new HtmlUnitDriver(); 

     // And now use this to visit Google 
     driver.get("http://www.google.com"); 

     // Find the text input element by its name 
     WebElement element = driver.findElement(By.name("q")); 

     // Enter something to search for 
     element.sendKeys("Cheese!"); 

     // Now submit the form. WebDriver will find the form for us from the element 
     element.submit(); 

     // Check the title of the page 
     System.out.println("Page title is: " + driver.getTitle()); 
    } 
} 

Mais il donne l'erreur suivante (comme indiqué dans la console d'Eclipse):

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element with name: q 
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_23' 
Driver info: driver.version: TestHtmlUnitDriver 
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElementByName(HtmlUnitDriver.java:714) 
    at org.openqa.selenium.By$4.findElement(By.java:148) 
    at org.openqa.selenium.htmlunit.HtmlUnitDriver$5.call(HtmlUnitDriver.java:1185) 
    at org.openqa.selenium.htmlunit.HtmlUnitDriver$5.call(HtmlUnitDriver.java:1) 
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.implicitlyWaitFor(HtmlUnitDriver.java:932) 
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElement(HtmlUnitDriver.java:1182) 
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElement(HtmlUnitDriver.java:368) 
    at com.comverse.plus.selenium.TestHtmlUnitDriver.main(TestHtmlUnitDriver.java:19) 

que quelqu'un peut me aider à résoudre mon problème?

+0

Il a dit " Impossible de localiser l'élément avec le nom: q ". Y a-t-il un élément nommé 'q'? – nitind

Répondre

1

Exécution de votre code J'ai eu le même problème.

Ceci est probablement dû au fait que javascript est désactivé par défaut dans HtmlunitDriver. Il semble que votre test tente de localiser l'élément avant que la page ne soit complètement chargée. Dans la section "Javascript dans le HtmlUnitDriver" de la page wiki HtmlUnitDriver, ils expliquent cela et comment cela affecte à la fois javascript et le DOM.

J'ai été capable de faire fonctionner votre code de deux façons. Le premier est en ajoutant une attente de la présence d'un élément avec le nom de « q »:

driver.get("http://www.google.com"); 

    Wait<WebDriver> wait = new WebDriverWait(driver, 5); 
    ExpectedCondition<WebElement> condition = 
     new ExpectedCondition<WebElement>() { 
      @Override 
      public WebElement apply(WebDriver driver) { 
       return driver.findElement(By.name("q")); 
      } 
     }; 
    wait.until(condition); 

    WebElement element = driver.findElement(By.name("q")); 

L'autre est en permettant javascript après la création du HtmlUnitDriver:

HtmlUnitDriver driver = new HtmlUnitDriver(); 
    driver.setJavascriptEnabled(true); 
0
import java.util.regex.Pattern; 
import java.util.concurrent.TimeUnit; 
import org.junit.*; 
import static org.junit.Assert.*; 
import static org.hamcrest.CoreMatchers.*; 
import org.openqa.selenium.*; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.Select; 
import org.openqa.selenium.support.ui.ExpectedCondition; 
import org.openqa.selenium.support.ui.WebDriverWait; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 

public class Selenium2Example { 

    public static void main(String[] args) throws InterruptedException { 
     WebDriver driver = new FirefoxDriver(); 
     driver.get("http://www.google.com"); 

     WebElement element = driver.findElement(By.name("q")); 
     element.sendKeys("Cheese!"); 
     element.submit(); 

     System.out.println("Page title is: " + driver.getTitle()); 

     (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver d) { 
       return d.getTitle().toLowerCase().startsWith("cheese!"); 
      } 
     }); 

     System.out.println("Page title is: " + driver.getTitle()); 
     TimeUnit.SECONDS.sleep(5); 

     driver.quit(); 
    } 
} 
Questions connexes