我正在关注页面对象模型,其中我已经在页面中放置了所有WebElement地址和方法,例如id,xpath等。 示例:在登录页面上,我们有用户名字段,密码字段和登录按钮。所有这些都将在LoginPage.java上。此页面还包括使用Webelements的方法。所以从实际的测试用例来看,我只是调用页面上定义的方法。现在这是我的困境。我有几个测试步骤需要我点击一个元素。 所以说我需要点击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
有人可以用不同的方法帮助我。
谢谢
答案 0 :(得分:2)
您可以使用以下内容:
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);
}
答案 1 :(得分:0)
public class Login_Page {
private static WebElement element = null;
//username
public static WebElement Textbox_UserName (WebDriver driver)
{
element = driver.findElement(By.id("username"));
return element;
}
现在,在Test Case方法中,只需调用:
@Test
public void Llogin()
{
//initiate webdriver
//driver.get("url")
Login_page.Textbox_UserName(driver).sendKeys("username")
}
答案 2 :(得分:0)
如何做到这一点,使你的标识符静态,然后调用从测试中传递它们。虽然我不会建议,因为测试可以更改标识符,并且很难理解为什么测试失败。
您的网页对象类
public class GoogleSearch {
@FindBy(name="q")
static WebElement searchBox;
public GoogleSearch(WebDriver driver){
PageFactory.initElements(driver, this);
driver.get("https://www.google.com");
}
public void enterText(WebElement element, String text){
element.sendKeys(text);
}
}
这就是测试类的样子
public class GoogleTest {
WebDriver driver;
@BeforeMethod
public void setup(){
driver = new FirefoxDriver();
}
@AfterMethod
public void tearDown(){
driver.quit();
}
@Test
public void SearchOnGoogle(){
GoogleSearch googleSearchPage = PageFactory.initElements(driver, GoogleSearch.class);
googleSearchPage.enterText(GoogleSearch.searchBox, "selenium webdriver");
}
}
要进一步优化,您可以在 BasePage 中使用此 enterText 方法,并且每个页面对象都可以扩展此 BasePage类