【发布时间】:2021-12-13 02:21:02
【问题描述】:
我正在尝试将所有这些工具结合在一起。 这是我的项目的详细信息和一些屏幕截图。 我需要在编译后编织我的源代码。
注释:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Click {}
方面:
@Aspect
public class ClickAspect {
@Pointcut("@annotation(com.selenium.aspect.support.annotation.Click)")
public void clickAnn() {}
@Around("clickAnn()")
public void clickOnAction(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Clicking on a button");
joinPoint.proceed();
}
}
页面:
public class Page {
@FindBy(id = "menu-item-40489")
private WebElement search;
public Page(WebDriver driver) {
PageFactory.initElements(driver, this);
}
@Click
public void clickOnSearch() {
search.click();
}
}
测试类:
public class SeleniumAspectSupportTest {
private WebDriver driver;
private Page page;
@BeforeTest
public void initDriver() {
System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
page = new Page(driver);
}
@AfterTest
public void dropDriver() {
driver.close();
}
@Test
public void simpleTest() {
driver.get("https://www.baeldung.com");
page.clickOnSearch();
System.out.println("DONE");
}
}
pom.xml:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
<configuration>
<complianceLevel>11</complianceLevel>
<source>11</source>
<target>11</target>
</configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
aop.xml:
<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
<aspects>
<aspect name="com.selenium.aspect.support.controller.ClickAspect"/>
</aspects>
</aspectj>
建议不起作用,但测试通过了。 我尝试了不同的 aspectj 库版本。 我错过了什么让它发挥作用?
【问题讨论】:
-
欢迎来到 SO。请使用代码块而不是屏幕截图来编辑您的问题。没有人愿意使用 OCR 在她的本地 IDE 中重现您的问题。非常感谢。此外,Mojohaus AspectJ Maven Plugin 1.11 不支持超过 Java 8。要么升级到 1.14.0,要么使用功能更丰富和最新的AspectJ.dev version。另请参阅 here 以获得解释。
-
还请注意,您的环绕建议只能拦截
void方法,因为它也有void返回类型。如果你曾经用@Click注解了一个非void方法,你需要调整advice方法。但现在应该不成问题。 -
感谢您的建议,用代码编辑了我的问题。我已经尝试了两种插件调整,但没有帮助。还有其他建议吗?
-
我现在有点忙。如果您需要快速反馈,GitHub 上的 MCVE 我可以克隆并运行它会很有帮助。否则,我可能需要一段时间才能将所有代码复制并粘贴到新项目中并添加缺失的部分(例如运行测试的虚拟 HTML 页面)。
-
另一个好处是我可以简单地向您发送带有修复程序的 PR。
标签: java selenium maven testng aspectj