我一直在使用页面对象模型来查找元素并对其执行操作,例如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 secondsLoginPage.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;}有没有更简单的方法来做到这一点,而不必通过应用这些更改的所有代码?
1 回答
森栏
TA贡献1810条经验 获得超5个赞
public void waitForElementAndClick(WebElement element, WebDriver driver):为什么这个函数明确需要一个WebDriver对象?
1) 如果将等待函数写在 loginPage 类中,该类已经有一个 webdriver 构造函数参数,则可以在等待函数内部传递相同的对象
public class loginPage extends HelperClass
{
WebDriver driver;
//Constructor :
public loginPage(WebDriver driver) {
this.driver = driver;
}
}
WebDriverWait wait = new WebDriverWait(driver, 30); : 这里会自动获取驱动变量
2) 如果wait函数是写在其他类中的,可以采用同样的方法来避免wait函数有驱动变量
添加回答
举报
0/150
提交
取消