Ich weiß, dass diese Frage bereits beantwortet wurde und vor einer Weile gefragt wurde, aber ich dachte, dass ich ein konkretes Beispiel dafür geben würde, wie man seine eigene Erwartete Bedingung dafür schreibt. Durch die Schaffung Klasse dieses Erwarteter Zustand:
/**
* Since the proxy won't try getting the actual web element until you
* call a method on it, and since it is highly unlikely (if not impossible)
* to get a web element that doesn't have a tag name, this simply will take
* in a proxy web element and call the getTagName method on it. If it throws
* a NoSuchElementException then return null (signaling that it hasn't been
* found yet). Otherwise, return the proxy web element.
*/
public class ProxyWebElementLocated implements ExpectedCondition<WebElement> {
private WebElement proxy;
public ProxyWebElementLocated(WebElement proxy) {
this.proxy = proxy;
}
@Override
public WebElement apply(WebDriver d) {
try {
proxy.getTagName();
} catch (NoSuchElementException e) {
return null;
}
return proxy;
}
}
Dann wird diese ermöglichen es Ihnen zu tun:
wait.until(new ProxyWebElementLocated(authorField));
Und das ist alles, was Sie wirklich brauchen.Aber wenn man die Abstraktion noch einen Schritt weiter gehen wollen, könnten Sie eine Klasse wie folgt erstellen:
public final class MyExpectedConditions {
private MyExpectedConditions() {}
public static ExpectedCondition<WebElement> proxyWebElementLocated(WebElement proxy) {
return new ProxyWebElementLocated(proxy);
}
}
die dann erlauben würden Sie so etwas wie dies zu tun:
wait.until(MyExpectedConditions.proxyWebElementLocated(authorField));
Die MyExpectedConditions
Klasse sein kann ein bisschen Overkill für einen Erwarteten Zustand, aber wenn Sie mehrere Erwartete Bedingungen haben, dann macht es die Dinge viel schöner.
Als abschließende Bemerkung für alle, die wirklich wollen, die extra Meile zu gehen, können Sie auch Methoden ergänzen die MyExpectedConditions
Klasse, die die Methoden in der ExpectedConditions
Klasse wickeln, und dann können Sie alle Ihre erwarteten Bedingungen Sachen von einem Ort erhalten . (Ich würde vorschlagen, ExpectedConditions
anstelle der Wrapper-Methoden zu erweitern, aber es hat einen privaten Konstruktor, so dass es unmöglich zu erweitern. Dies bleibt Wrapper-Methoden als die einzige Option für diejenigen, die alles an einem Ort wollen.)
Danke, ich habe meine eigenen Bedingungen und die Arbeit erstellt! – Arthur