【发布时间】:2022-12-09 17:41:27
【问题描述】:
测试使用包含动作的相同函数两次。第一次运行时它工作正常并且通过了测试用例。但是,在下一种情况下运行相同的功能不会正确触发操作。到目前为止我能看到的是该程序认为该操作已执行,因为它在下一步失败,如果前一个步骤不起作用则无法完成。
该代码在 Chrome 和 Firefox 上运行。 Chrome 运行正常,Firefox 不行。
@FindBy(css = "div.o-dropdown:nth-child(3)")
public WebElement myAccountBtn;
public void hoverProfileGoToManageProfiles() {
WebElement topNavBar = driver.findElement(By.cssSelector(".c-navbar__container"));
wait.until(ExpectedConditions.invisibilityOf(loadingSpinner));
wait.until(ExpectedConditions.elementToBeClickable(topNavBar));
performHoverManageProfiles();
}
public void performHoverManageProfiles() {
actions.moveToElement(myAccountBtn).perform();
WebElement manageProfilesBtn = driver.findElement(By.xpath("//*[@id=\"app\"]/nav[1]/div/div[2]/div[1]/div[2]/div/a[1]"));
WebElement clickableManageProfilesBtn = wait.until(ExpectedConditions.elementToBeClickable(manageProfilesBtn));
clickableManageProfilesBtn.click();
}
如您所见,在 performHoverManageProfiles() 中有 WebElement,它只能在操作(悬停)完成后才能找到。
我尝试将 WebElement 的创建移动到函数中,以便在每次运行时都能找到它。 此外,粘贴的代码已经经过一些更改,这就是它可能很混乱的原因,但到目前为止,结果是一样的——适用于 Chrome,不适用于 Firefox。
还尝试在每次运行后清除 myAccountBtn,同时在函数开始时创建它,但也没有成功。
我还认为这可能是性能问题,也许 Firefox 太快了,所以我添加了 Thread.sleep 和 fluent wait 直到网站加载完毕,但同样没有成功。
【问题讨论】:
标签: java selenium selenium-webdriver automated-tests testng