我正在遵循页面对象模型,其中我已将所有 WebElement 地址和方法(即 id、xpath 等)放置在页面中。 示例:在登录页面上,我们有用户名字段、密码字段和登录按钮。所以所有这些都将在 LoginPage.java 上。此页面还包括使用 Webelement 的方法。因此,从实际的测试用例来看,我只是调用页面上定义的方法。现在这是我的困境。我有几个测试步骤需要我单击一个元素。 假设我需要单击 Link1、Link2 和 Link3。现在我正在做的是为每个步骤编写一个单独的方法并将它们保留在如下页面上:
@FindBy(id = "someId1")
WebElement link1;
@FindBy(id = "someId2")
WebElement link2;
public void clickOnLink1(){
link1.click();
}
public void clickOnLink2(){
link2.click();
}
测试用例:
clickOnLink1();
clickOnLink2();
因此,如果我有 50 个步骤,需要我单击 50 个不同的元素,我将需要 50 种不同的方法,这是非常不正确且低效的。我可以使用如下通用方法:
public void clickOnElement(WebElement element) {
element.click();
}
我可以将我想要点击的元素传递给这个方法,它会为我做这件事。
不幸的是,正如我之前所说,我遵循页面对象模型,因此所有 WebElement 地址(例如 id)都存在于页面上,而不是测试用例上,因此我无法使用此方法,因为我需要从测试用例传递 webelement .
有人可以用不同的方法帮助我吗?
谢谢
最佳答案
您可以使用如下所示的内容:
public class Login_Page {
@FindBy(id = "someId1")
WebElement link1;
@FindBy(id = "someId2")
WebElement link2;
//constructor
public Login_Page(driver) {
PageFactory.initElements(driver, this);
}
//Generic Click method
public boolean genericClick(WebDriver driver, WebElement elementToBeClicked)
{
try{
elementToBeClicked.click();
return true;
}
catch(Exception e){
return false;
}
}
现在在测试方法中:
@Test
public void LoginTest()
{
Webdriver driver = new FirefoxDriver();
driver.get("someurl")
Login_Page lp = new Login_Page(driver);
lp.genericClick(driver, lp.link1);
}
关于java - 为 Selenium 页面对象模型框架编写通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42994648/