当前位置: 首页 > 知识库问答 >
问题:

如何使用包装的元素初始化WebElement

薛华容
2023-03-14

我遵循了一个关于如何在执行任何操作之前关闭随机打开的弹出窗口的教程:

https://www.vinsguru.com/selenium-webdriver-how-to-handle-annoying-random-popup-alerts/

其思想是创建一个ElementProxy类,该类实现接口调用处理程序。因此,在调用实际方法之前,将首先调用代理的invoke方法。

因此,我们在调用WebElement上的任何操作之前调用checkForPopupAndKill。

然后,我们用这个代理对象包装常规WebElement。我们基本上需要一个类,它有一个方法来接受WebElement并返回带有包装器的WebElement。

在教程中,他们使用包装元素初始化页面对象的元素,如下所示:

//first init elements
        PageFactory.initElements(driver, pageobject);

        //then access all the WebElements and create a wrapper
        for(Field f:pageobject.getClass().getDeclaredFields()){
            if(f.getType().equals(WebElement.class)){
                boolean accessible = f.isAccessible();
                f.setAccessible(true);
                //reset the webelement with proxy object
                f.set(pageobject, ElementGuard.guard((WebElement) f.get(pageobject)));
                f.setAccessible(accessible);
            }  
        }

这是因为他们在page对象中使用FindBy注释声明了文件,但在我的框架中,我声明的元素如下:

WebElement elt = getSmartElement(By.cssSelector("#my_id"));

我的问题是,如何使用wrapper元素初始化我的元素?

提前感谢。

共有1个答案

益光亮
2023-03-14

您可以直接使用ElementGuard,如图所示,它将实际的WebElement与代理包装在一起。

WebElement elt=ElementGuard。guard(getSmartElement(由.cssSelector(“#my\u id”)))

 类似资料:
  • 问题内容: 根据JLS,数组应在初始化后立即用零填充。但是,我面临的情况并非如此。这种行为首先在JDK 7u4中发生,并且在以后的所有更新中也发生(我使用64位实现)。以下代码引发异常: 该异常在JVM执行代码块的编译之后发生,并且不会出现带有标志的异常。此外,该语句(与该代码中的所有其他语句一样)是必需的,并且如果不存在该异常,则不会发生。显然,此可能的错误与JVM优化有关。对于这种行为有什么想

  • 问题内容: 情况: Go程序包 A 由3个文件组成,每个文件中我都使用另一个程序包 B 中的函数。我必须在每个文件的开头导入包 B。 题: 程序包 B 实际上是初始化3次还是仅初始化1次? 问题答案: 简短答案:初始化仅执行一次。 长答案:引用相关的规范部分- 程序执行: 通过为所有包级变量分配初始值,然后使用名称和签名调用任何包级函数来初始化不导入的包 在其来源中定义。名称为package-sc

  • 根据 JLS, 数组应由零填充。但是,我面临的情况并非如此。这种行为首先发生在JDK 7u4中,也发生在所有以后的更新中(我使用64位实现)。下面的代码引发异常: 异常发生在JVM执行代码块编译之后,并且不会以标志出现。此外,语句(与此代码中的所有其他语句一样)是必要的,如果不存在异常,则不会发生。很明显,这个可能的错误与一些JVM优化有关。对于这种行为的原因有什么想法吗? 更新:< br >我在

  • 在Java中 作为包装类。当它只是一个对象引用时,它是如何初始化的?有人能解释一下吗?

  • 问题内容: 在bash中以这种方式声明数组是否会将所有数组元素初始化为0? 如果没有,如何将数组元素初始化为0? 问题答案: 您的示例将声明/初始化一个空数组。 如果要初始化数组成员,请执行以下操作: 如果要初始化具有100个成员的数组,可以执行以下操作: 请记住,bash中的数组不是固定长度的(索引也不必是连续的)。因此,除非知道数字应为多少,否则无法初始化数组的 所有 成员。

  • 问题内容: 我想在单个语句(可能包含多个嵌套语句)中声明一个完全填充的地图字段,如下所示: 匿名初始化程序不会这样做,原因与调用返回新填充映射的函数不会这样做的原因相同:匿名初始化程序需要两个顶级语句:一个用于变量声明,一个用于方法或初始化器。 双花括号(和)惯用语可以工作,但是它创建了一个Extended的新类,而我不喜欢由此表示的开销。 Java 8的lambda也许提供了一种更好的方法来实现