作者:扯淡的青春0707 | 来源:互联网 | 2023-10-12 12:50
首先,我不太了解为什么您绝对需要WebElement
在元素真正出现在页面中之前获得引用。在正常情况下,您可以检查页面是否已完全加载,然后查找WebElement
。NoSuchElementException
如前所述,通常首先使用循环和捕获来完成。
但是,如果需要WebElement
在页面上找不到引用之前的引用,我将简单地创建一个代理(延迟仅在第一次需要时)加载真实WebElement
实例。像这样:
public WebElement getElement(final int numOnPage) {
return (WebElement) Proxy.newProxyInstance(this.getclass().getclassLoader(), new Class>[] { WebElement.class }, new invocationHandler() {
// Lazy initialized instance of WebElement
private WebElement webElement;
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (webElement == null) {
webElement = driver.findElement(By.id("element" + numOnPage));
}
return method.invoke(webElement, args);
}
});
}
通过调用getElement
,可以检索类型为的对象WebElement
。调用其方法之一后,就会使用检索它WebDriver.findElement
。请注意,如果在代理实例上调用方法,则该元素必须在页面中,否则当然会得到aNoSuchElementException
。