在Selenium WebDriver测试中使用Page对象时定义Xpath时出现问题



硒新手在这里...我正在尝试创建我的第一个测试框架。

测试网站 : https://www.phptravels.net/

测试用例 :

  1. 打开浏览器并进入网页
  2. 页面加载完成后,点击我的帐户 ->登录

我已经在我的页面对象类中使用了 xpath,脚本只会运行到启动网页。它无法单击登录链接。

我试图包含一个隐式等待,假设页面加载所需的时间比平时长。即便如此,问题仍然存在。

你能帮我了解这将工作的正确路径是什么吗?

法典:

POM_HomePage.java

package PageObjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class POM_HomePage {
WebDriver driver;
public POM_HomePage(WebDriver driver) {
this.driver=driver;
PageFactory.initElements(driver, this);
}

@FindBy(xpath="//*[@id='li_myaccount']/ul/li[1]/a")
WebElement LinkMyAccount;
public WebElement clickMyAccount() {
return LinkMyAccount;
}

}

主页.java

package TestGroupID;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.testng.annotations.Test;
import PageObjects.POM_HomePage;
import Resources.MasterScript;

public class HomePage extends MasterScript{
@Test
public void SignIn() throws IOException {
driver=LoadBrowser();
LoadPropFile();
driver.get(prop.getProperty("test_website"));
POM_HomePage pomHome=new POM_HomePage(driver);
driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
if (pomHome.clickMyAccount().isDisplayed()) {
pomHome.clickMyAccount().click();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
}
}
}

根据你提到的问题,页面加载后,点击我的帐户 ->登录。因此,您应该在两个单独的WebElements上调用click()方法。但是您的POM_HomePage.java只返回一个WebElement作为@FindBy(xpath="//*[@id='li_myaccount']/ul/li[1]/a")

溶液

  • POM_HomePage.java中定义两个WebElements和两个关联的functions()如下:

    • 我的账户链接

      @FindBy(xpath="//div[@class='navbar']//li[@id='li_myaccount']/a")
      WebElement LinkMyAccount;
      public WebElement clickMyAccount() {
      return LinkMyAccount;
      }
      
    • 登录链接

      @FindBy(xpath="//div[@class='navbar']//li[@id='li_myaccount']//ul[@class='dropdown-menu']/li/a[contains(.,'Login')]")
      WebElement LinkLogin;
      public WebElement clickLogin() {
      return LinkLogin;
      }
      
  • HomePage.java调用两个Web元素isDisplayed()click(),如下所示:

    @Test
    public void SignIn() throws IOException {
    driver=LoadBrowser();
    LoadPropFile();
    driver.get(prop.getProperty("test_website"));
    POM_HomePage pomHome=new POM_HomePage(driver);
    driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
    if (pomHome.clickMyAccount().isDisplayed()) {
    pomHome.clickMyAccount().click();
    }
    if (pomHome.clickLogin().isDisplayed()) {
    pomHome.clickLogin().click();
    }
    }
    

最新更新