我可以向WebElement添加其他方法吗?

时间:2016-11-14 21:35:26

标签: java selenium

我正在使用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);

有更好的方法吗?我觉得我的测试用例的流程现在有这个半难以理解的代码。这样做确实为我节省了数百行代码,但现在可读性下降了。有什么建议?

1 个答案:

答案 0 :(得分:0)

这里似乎有很多可能性,使答案基于意见。您应该考虑检查您的问题以避免类似TIMTOWTDI的讨论(如果有的话)。

对于您的问题,randomButtonClick()肯定是不准确的,因为它意味着单击RANDOM按钮而不是您提供的按钮。虽然,根据您的代码,您不提供任何方法(?)。

另一方面,genericAction.click(myPage.randomButton);还包括一个随机按钮。但更重要的是,你试图通过创建genericAction(我认为它是class GenericAction)来击败死马。这个解决方案并不坏,它是重复的。例如,查看org.openqa.selenium.interactions.Actions。它具有可读性,允许您链接您的互动事件。

最后,请记住,您获得的解决方案不一定总是适合您的网页/应用程序。如果您确信使用genericAction获得的抽象级别很好并且您能够使用它处理所有按钮,那就去吧。

PS。仍然不确定random这个词。你真的想点击随机按钮吗?