我正在使用Java Selenium Page Factory方法。
我在页面工厂中使用@FindBy表示法:
@FindBy(id = "randomButton")
public WebElement randomButton;
因为我在任何给定的页面上都有这么多按钮,所以抽象出了一个通用的按钮点击方法,这样我就不必重写那么多代码了:
在:
public void randomButtonClick(WebElement pageElement) throws InterruptedException {
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(randomButton));
randomButton.click();
}
public void button2Click(WebElement pageElement) throws InterruptedException {
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(button2));
button2.click();
}
public void button3Click(WebElement pageElement) throws InterruptedException {
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(button3));
button3.click();
}
and so on for the other 10-20 buttons on any given page
在: 然后我添加了一个通用动作类,然后传递了所有按钮:
public void click(WebElement element){
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.elementToBeClickable(element));
element.click();
}
在我的通话测试中,我称之为:
myPage.randomButtonClick();
但现在我称之为:
genericAction.click(myPage.randomButton);
有更好的方法吗?我觉得我的测试用例的流程现在有这个半难以理解的代码。这样做确实为我节省了数百行代码,但现在可读性下降了。有什么建议?
答案 0 :(得分:0)
这里似乎有很多可能性,使答案基于意见。您应该考虑检查您的问题以避免类似TIMTOWTDI的讨论(如果有的话)。
对于您的问题,randomButtonClick()
肯定是不准确的,因为它意味着单击RANDOM按钮而不是您提供的按钮。虽然,根据您的代码,您不提供任何方法(?)。
另一方面,genericAction.click(myPage.randomButton);
还包括一个随机按钮。但更重要的是,你试图通过创建genericAction
(我认为它是class GenericAction
)来击败死马。这个解决方案并不坏,它是重复的。例如,查看org.openqa.selenium.interactions.Actions
。它具有可读性,允许您链接您的互动事件。
最后,请记住,您获得的解决方案不一定总是适合您的网页/应用程序。如果您确信使用genericAction
获得的抽象级别很好并且您能够使用它处理所有按钮,那就去吧。
PS。仍然不确定random
这个词。你真的想点击随机按钮吗?