有没有办法在每次调用bean之前调用一个方法?
我在春天使用硒和黄瓜。由于这个原因,所有页面都是单例,因为我使用@FindBy注释,所以每次使用页面时都要调用PageFactory.initElements(driver,object)。
使用标准页面对象模式,可以通过在构造函数中调用它来完成。
我想避免的是在每种方法中指定方法如下:
public void clickThis() {
PageFactory.initElements(driver, this)
...
}
public void clickThat() {
PageFactory.initElements(driver, this)
...
}
我不想返回新页面,因为它们无法在功能之间共享。
答案 0 :(得分:4)
Spring拥有出色的AOP支持,您可以从中获益。
为解决问题,您需要做的是。
通过在Spring配置文件中添加<aop:aspectj-autoproxy/>
来启用Spring中的方面。
创建一个简单的类并将其注册为Aspect。
来源:
<bean id="myAspect" class="some.package.MyFirstAspect">
<!-- possible properties ... for instance, the driver. -->
</bean>
MyFirstAspect
课程。请注意,它标有@Aspect
注释。在类中,您必须创建一个方法并将其注册为@Before
建议(在方法执行之前,之后或周围运行建议)。
package some.package;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class MyFirstAspect {
@Before("execution(* some.package.SomeClass.*(..))")
public void initElements() {
//your custom logic that has to be executed before the `clickThis`
}
}
更多信息:
答案 1 :(得分:0)
正如kocko所提到的,你可以使用aspects。
除此之外:我不确定我是否理解正确,但你真的需要在每个方法调用中调用initElements吗?或者只是在您创建页面时。在后面的例子中,我建议创建一个抽象页面,在其中调用initElements方法并从中继承每个其他页面。