我一直在使用页面对象模型来查找元素并对其执行操作,例如
public class loginPage extends HelperClass
{
@FindBy(xpath = ("//button[@type='submit']"))
private WebElement loginButton;
public loginPage clickLogin()
{
loginButton.click()
return this;
}
}
在我的 JUnit 测试中,我会这样调用函数:
WebDriver driver = setUpBrowser("FireFox", websiteURL);
loginPage LoginPage = new loginPage(driver);
delay(5000); //delay 5 seconds
LoginPage.clickLogin();
您会注意到显式延迟并不理想。所以我决定写一个像这样的等待方法:
public void waitForElementAndClick(WebElement element, WebDriver driver)
{
WebDriverWait wait = new WebDriverWait(driver, 30);
//wait.until(ExpectedConditions.visibilityOf(element));
wait.until(ExpectedConditions.or
(
ExpectedConditions.visibilityOf(element), ExpectedConditions.elementToBeClickable(element)
));
System.out.println(element);
element.click();
}
一切正常,所以你问的问题是什么?好吧,问题是去更改我为适应此等待功能而编写的所有代码是一项巨大的维护工作。我需要更改 JUnit 调用以包含驱动程序,例如
LoginPage.clickLogin(driver);
然后在页面对象模型中,我也必须更改所有方法,例如
public loginPage clickLogin(WebDriver driver)
{
waitForElementAndClick(loginButton, driver);
return this;
}
有没有更简单的方法来做到这一点,而不必通过应用这些更改的所有代码?
森栏
相关分类