kotlin 使用页面对象模式的最佳实践

xqkwcwgp  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(119)

我试图找出使Page对象简单的最佳方法,以及是否将所有逻辑放在其他地方。所有Selenium代码/功能是否应该在Page对象中,或者在我用来访问它的Step Definition方法中。
我有以下结构:
cucumber .特征文件

Given blablabla

Java/Kotlin步骤定义

@Given("^blablabla$") {

}

和页面对象文件

fun getOwnerFields(): MutableList<WebElement> {
   return driver.findElements(By.if("owner-fields")
}

举个简单的例子。
现在,我不能与自己达成一致,也不能找到许多其他人的意见,是:
我应该在Step Definition类中还是在Page对象中执行页面操作-例如,单击按钮?
这一点:

@Given("^I click on the Next button$") {
    startPage.nextButton().click()
}

PO:
fun nextButton(): WebElement {
    return driver.findElement(By.id("next-button")
}

或:v

@Given("^I click on the Next button$") {
    startPage.clickNextButton()
}

PO:
fun clickNextButton(): WebElement {
    return driver.findElement(By.id("next-button").click()
}

我倾向于认为最好将所有页面和selenium代码保存在Page对象中。但在这种情况下,这会使PO更大,因为我需要不同的方法来进行点击、检查可见性、计数等。而如果所有这些都在步骤定义中完成,PO实际上可以只包含页面元素的getter和setter。
我知道这并不是那么重要,但是我倾向于用最好的和/或最干净的方式来组织我的代码。

gcxthw6b

gcxthw6b1#

这确实是一个基于观点的问题。它取决于一系列因素,包括你的应用程序可以做什么,以及用户交互的灵活程度。
至于我,因为你的核心抽象被假设在Gherkin语句级别上,我想说我没有意义把很多抽象放在较低的级别上。
Button并不是一个很好的例子,因为通常你只能点击它,所以几乎没有其他类型的交互。但是对于其他元素,我的选择肯定会落在你的第一种方法。
这种方法可以让您专注于特定于步骤的逻辑,以便在步骤定义中可以清楚地看到那里发生了什么,而无需在类中进行额外的导航。

相关问题