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

Java 在Selenium WebDriver测试中使用页面对象时定义Xpath时出现问题,java,selenium,selenium-webdriver,pageobjects,Java,Selenium,Selenium Webdriver,Pageobjects,硒新手在这里。。。我正在尝试创建我的第一个测试框架 考试网站: 测试用例: 打开浏览器并输入网页 加载页面后,单击MyAccount->Login 我在我的页面对象类中使用了xpath,脚本将只运行到启动网页为止。它无法单击登录链接 我已经尝试包含一个隐式等待,假设加载页面所花费的时间比平常长。即便如此,问题依然存在 你能帮我理解什么是正确的xpath吗 代码: POM_HomePage.java package PageObjects; import org.openqa.selenium.

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

考试网站:

测试用例:

  • 打开浏览器并输入网页
  • 加载页面后,单击MyAccount->Login
  • 我在我的页面对象类中使用了xpath,脚本将只运行到启动网页为止。它无法单击登录链接

    我已经尝试包含一个隐式等待,假设加载页面所花费的时间比平常长。即便如此,问题依然存在

    你能帮我理解什么是正确的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;
        }
    
    
    }
    
    HomePage.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);
            }
        }
    }
    

    根据您提到的问题,页面加载后,单击MyAccount->Login。因此,您应该在两个单独的Web元素上调用
    click()
    方法。但是您的
    POM_HomePage.java
    只返回一个web元素作为
    @FindBy(xpath=“/*[@id='li\u myaccount']]/ul/li[1]/a”)

    解决方案
    • POM_HomePage.java
      中定义两个WebElement和两个相关的
      函数()
      ,如下所示:

      @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();
          }
      }
      
      • 我的帐户链接

        @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
      中调用
      isDisplayed()
      单击()
      ,这两个Web元素如下所示:

      @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();
          }
      }
      

    感谢您的解决方案。不幸的是,该网站似乎有问题(“我们的系统文件夹路径似乎没有正确设置。请打开以下文件并更正此问题:index.php”),但尚未能够对其进行测试。接受了答案。再次感谢你的帮助。