在Selenium java中如何将页面对象与代码逻辑分离
我正在学习并尝试在selenium中将定位器与实际代码分开。我已经将它们分开了,但我需要更多优化方面的指导,我如何才能对代码进行更多优化?页面对象设计模型是否仅用于存储定位器?或者我们也可以存储他们的方法。有人能解释一下下面的代码吗
带有逻辑(TC_01Test.java)和基的实际代码。java类初始化驱动程序
public class TC_01Test extends Base {
WebDriver driver;
@BeforeTest
public void initialize() throws IOException {
driver = initializeDriver();
}
// Sign In functionality
@Test
public void SignIn() throws InterruptedException {
TC_01 tc02 = new TC_01(driver);
tc02.siginLink().click();
System.out.println(driver.getWindowHandle());
driver.switchTo().frame("authiframe");
System.out.println(driver.getWindowHandle());
tc02.mobileNumber().sendKeys(prop.getProperty("phoneNumber"));
System.out.println("number entered");
tc02.submitButton().click();
System.out.println("button clicked");
driver.switchTo().defaultContent();
System.out.println(driver.getWindowHandle());
tc02.closePopup().click();
}
// SignUp functionality
@Test
public void SignOut() {
TC_01 tc01 = new TC_01(driver);
tc01.sigupLink().click();
driver.switchTo().frame("authiframe");
tc01.mobileNumber().sendKeys(prop.getProperty("phoneNumber"));
tc01.submitButton().click();
driver.switchTo().defaultContent();
tc01.closePopup().click();
}
@AfterTest
public void closeBrowser() {
driver = tearDown();
}
}
下面是为上述测试用例创建的页面对象(TC_01.java)的代码强>
public class TC_01 {
WebDriver driver;
public TC_01(WebDriver driver) {
this.driver = driver;
}
// driver.findElement(By.xpath("//a[@id='get_sign_in']"))
// mobileNumber= driver.findElement(By.xpath("//input[@id='authMobile']")
// driver.findElement(By.id("mobileSubmitBtn"))
// driver.findElement(By.xpath("//div[@class='popContent']/a"))
By signinLink = By.xpath("//a[@id='get_sign_in']");
By signupLink = By.xpath("//a[@id='get_sign_up']");
By mobileNumber = By.xpath("//input[@id='authMobile']");
By submitButton = By.id("mobileSubmitBtn");
By closePopup = By.xpath("//div[@class='popContent']/a");
public WebElement siginLink() {
return driver.findElement(signinLink);
}
public WebElement sigupLink() {
return driver.findElement(signupLink);
}
public WebElement mobileNumber() {
return driver.findElement(mobileNumber);
}
public WebElement submitButton() {
return driver.findElement(submitButton);
}
public WebElement closePopup() {
return driver.findElement(closePopup);
}
}
# 1 楼答案
回答您的问题-是的,您也可以在PO类中存储方法。此外,这是一个很好的做法。 关于代码优化,最好是表达业务行为,而不是细粒度的技术操作。另外,您可以简单地在PO类中执行这些操作,而不是返回WebElement方法,然后在测试类中执行操作(单击、发送键等)。 检查下面的代码
这要简单得多。 顺便说一句,了解和使用PageFactory概念很有用-https://www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html
另外,请阅读“责任链”模式,但如果您精通Java,因为这是一个相当高级的主题