基本的な考え方は、次のようなことです。
try{
element.isDisplayed();
return true;
} catch(ElementNotFoundException e){
return false;
}
このコードの 2 つの場所を見つけました。
1 つ目は、すべてのページが継承するページ クラスです。そのようなクラスがない場合は、Utils クラスが機能します。関数呼び出しは次のようになりますpage.exists(page.getSaveButton())
。
ただし、私のお気に入りの方法 (もう少しセットアップが必要になります) は、WebElement の周りにラッパー クラスを作成することです (私はそれを EnhancedWebElement と呼びます)。そのコンストラクターは通常の WebElement を受け入れ、各関数呼び出しを WebElement にリダイレクトし、exists() 関数を持っています。
最後に、すべての要素に exists() 関数を持たせるには、DefaultFieldDecorator を拡張し、これらの関数をオーバーライドする必要があります。
@Override
public Object decorate(ClassLoader loader, Field field) {
if (!(WebElement.class.isAssignableFrom(field.getType())
|| isDecoratableList(field))) {
return null;
}
ElementLocator locator = factory.createLocator(field);
if (locator == null) {
return null;
}
if (EnhancedWebElement.class.isAssignableFrom(field.getType())) {
return proxyForLocator(loader, locator);
} else if (List.class.isAssignableFrom(field.getType())) {
return proxyForListLocator(loader, locator);
} else {
return null;
}
}
@Override
protected EnhancedWebElement proxyForLocator(ClassLoader loader, ElementLocator locator) {
InvocationHandler handler = new LocatingElementHandler(locator);
WebElement proxy= (WebElement) Proxy.newProxyInstance(
loader, new Class[] {WebElement.class, WrapsElement.class, Locatable.class}, handler);
return new EnhancedWebElement(proxy);
}
これを実装するには、initElements を呼び出すたびに、次のように呼び出します。
PageFactory.initElements(new EnhancedFieldDecorator(new DefaultElementLocatorFactory(driver)), this);
//Replace EnhancedFieldDecorator with the name of your decorator
これはあなたが求めている以上のものである可能性があり、そうであれば、その最上位の機能があなたが探しているものです。