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



>我已经按照有关如何在执行任何操作之前关闭随机打开的弹出窗口的教程进行操作:

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

这个想法是创建一个实现接口InvocationHandler的ElementProxy类。 因此,在调用实际方法之前,将首先调用代理的调用方法。

因此,我们在调用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);
}  
}

那是因为他们在页面对象中使用@FindBy注释声明了 filed,但在我的框架中,我将元素声明如下:

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

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

提前谢谢。

您可以直接使用ElementGuard,如下所示,它将实际的WebElement包装

为代理。WebElement elt = ElementGuard.guard(getSmartElement(By.cssSelector("#my_id")));

最新更新