您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何返回懒惰实例化的动态Web元素

如何返回懒惰实例化的动态Web元素

首先,我不太了解为什么您绝对需要WebElement在元素真正出现在页面中之前获得引用。在正常情况下,您可以检查页面是否已完全加载,然后查找WebElementNoSuchElementException如前所述,通常首先使用循环和捕获来完成。

但是,如果需要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

其他 2022/1/1 18:15:18 有510人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶