我在互联网上搜索了一下但是我想通过在stackoverflow上发帖并看看是否有任何意见我可能会得到一些见解。
我想知道是否有人对这两种设置页面对象的方式之间有偏好的意见:
public class LoginPage extends PageObject{
public void typeEmail(String email){
driver.findElement(EMAIL_SELECTOR).sendKeys(email);
}
public void typePassword(String pw){
driver.findElement(PASSWORD_SELECTOR).sendKeys(email);
}
public void submit(){
driver.findElement(SUBMIT_SELECTOR).click();
}
}
...和...
public class LoginPage extends PageObjects{
public void login(String email, String password){
driver.findElement(EMAIL_SELECTOR).sendKeys(email);
driver.findElement(PASSWORD_SELECTOR).sendKeys(email);
driver.findElement(SUBMIT_SELECTOR).click();
}
}
最初,我认为第二种方式会更好,因为如果登录流程由于某种原因而改变(这不太可能是登录,但你可以理解为其他类型的表格发生这种情况),你可以更新登录()方法和此更改将影响所有需要登录的测试。
但是,如果要在submit()之前验证错误条件或更多内容,则第二种解决方案不够灵活。
欢迎任何见解。
答案 0 :(得分:1)
页面对象定义:" PageObject不需要代表整个页面。它可能代表在网站或网页中多次出现的部分,例如网站导航。"
PageObject:
的关键点- The public methods represent the services that the page offers
- Try not to expose the internals of the page
- Generally don't make assertions
- Methods return other PageObjects
- Need not represent an entire page
- Different results for the same action are modelled as different methods
你的两个设置不是PageObject,但有一些相似之处。
答案 1 :(得分:0)
我个人更喜欢使用另一个抽象级别,如:
public void typeEmail(String email){
fillField(EMAIL_SELECTOR, email);
}
您的SeleniumWrapper类中的实现
public void fillField(WebElement selector, String text){
driver.findElement(selector).sendKeys(text);
}
这使代码更加美观
这与PageObjects没有直接关系,但如果你不使用BDD或关键字驱动的方法,这仍然是一种美化代码的方法