2016-09-01 6 views
2

Warum funktioniert das?wait.until (ExpectedConditions.invisibilityOfElementLocated()) mit @FindBy?

public void mymethod(){ 
    wait.until(ExpectedConditions.invisibilityOfElementLocated(by.id("myid")); 
} 

Und das funktioniert nicht? Ich verstehe nicht.

@FindBy (id="myid") 
WebElement myid; 

public mypagefactory(WebDriver driver){ 
    this.driver = driver; 
    PageFactory.initElements(driver); 
} 

public void mymethod(){ 
    wait.until(ExpectedConditions.invisibilityOfElementLocated((By) myid)); 
} 

Ich bekomme immer eine "ungültige Besetzung" Fehler auf der "(von)". Ich versuche die Methode der Seitenfabrikation zu verwenden.

Antwort

1

Die Bedingung invisibilityOfElementLocated erwartet einen Locator vom Typ By, aber Sie stellen den Proxy WebElement bereit. Verwenden Sie stattdessen invisibilityOfAllElements:

wait.until(ExpectedConditions.invisibilityOfAllElements(Arrays.asList(myid))); 
+0

Jetzt sehe ich deine Lösung, die voll und ganz Sinn macht. –

1

Sie versuchen, ein WebElement in By zu konvertieren, aber es handelt sich nicht um ein By-Element, sondern um ein WebElement.

by.id ("myid") kehrt zurück, also gibt es kein Problem.

+0

Gute Erklärung. –

1

Die Aussage

@FindBy (id="myid") 
WebElement myid; 

ein Äquivalent

By by = By.id("myid"); 
WebElement myid = driver.findElement(by); 

Wie Sie sehen myid vom Typ WebElement in beiden Fällen (Anmerkung nicht in By Objekt vom Typ konvertiert), während Gießen von WebElement bis By ist nicht möglich, da sie not sharing the same class hierarchy sind.

Verwandte Themen