2010-12-02 19 views
0

J'ai regardé tous les exemples et j'ai encore un problème avec waitForCondition. Voici mon code.waitForCondition donne missing; avant l'erreur d'instruction

WebDriverBackedSelenium seleniumWD = new WebDriverBackedSelenium(driver, "http://www.x.com"); 

seleniumWD.waitForCondition("seleniumWD.isElementPresent(\"fullname\");", "5000"); 

Je reçois l'erreur: seleniumWD n'est pas définie. Donc je l'ai changé pour:

WebDriverBackedSelenium seleniumWD = new WebDriverBackedSelenium(driver, "http://www.x.com"); 

seleniumWD.waitForCondition("boolean ok = seleniumWD.isElementPresent(\"fullname\");", "5000"); 

Et maintenant j'obtiens l'erreur: manquant; before statement

Répondre

1

Il semble que vous utilisiez l'objet Selenium JS issu du test basé sur Selenium 2/WebDriver. Au lieu d'utiliser WebDriverBackedSelenium, vous devez utiliser les classes ExpectedCondition et Wait fournies par WebDriver. Dans votre cas, en supposant que le fullname est l'id de l'élément pour lequel vous attendez, votre code devrait ressembler à ceci:

WebElement element; 
ExpectedCondition<Boolean> e = new ExpectedCondition<Boolean>() { 
    public Boolean apply(WebDriver d) { 
     element = d.findElement(By.id("fullname")); 
     return Boolean.TRUE; 
    } 
}; 

Wait<WebDriver> w = new WebDriverWait(driver, timeOutInSeconds); 
w.until(e); 

C'est un morceau de code vraiment grand, alors vous devriez envisager d'utiliser le Page Objects pattern qui est l'une des meilleures pratiques pour l'écriture des tests de sélénium. Exemple de page qui contient votre champ sera quelque chose comme ceci:

public class MyPage { 
    @FindBy(id="fullname") 
    private WebElement fullName; 

    public MyPage(WebDriver driver) { 
     PageFactory.initElements(new AjaxElementLocatorFactory(driver, 15), this); 
    } 

    public void setFullName(String value) { 
     fullName.clear(); 
     fullName.sendKeys(value); 
    } 
} 
+0

Je comprends votre code mais cela n'explique pas pourquoi je ne peux pas utiliser waitForCondition sans avoir une erreur. – John

+0

WebDriverBackedSelenium ne dispose pas de toutes les méthodes de l'interface Selenium d'origine. Une possibilité est que waitForCondition n'est pas encore fait ou peut être n'est pas prévu pour être implémenté car il y a API dans WebDriver pour gérer le même but. L'autre question est quel est le JavaScript que vous essayez d'exécuter? 'seleniumWD.isElementPresent' ressemble à ce que vous essayez d'appeler le JS fourni par Selenium 1 et il n'est pas disponible dans Se 2 –