【问题标题】:Having issues defining Xpath while using Page object in Selenium WebDriver testing在 Selenium WebDriver 测试中使用 Page 对象时定义 Xpath 时遇到问题
【发布时间】:2018-02-24 06:18:30
【问题描述】:

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

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

测试用例:

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

我在我的页面对象类中使用了 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);
        }
    }
}

【问题讨论】:

    标签: java selenium selenium-webdriver pageobjects


    【解决方案1】:

    根据您提到的问题,加载页面后 点击我的帐户 ->登录。所以你应该在两个单独的WebElements 上调用click() 方法。但是您的 POM_HomePage.java 仅返回 one 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 中为WebElements 调用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();
          }
      }
      

    【讨论】:

    • 感谢您的解决方案。不幸的是,该网站似乎有问题(“我们的系统文件夹路径似乎设置不正确。请打开以下文件并更正:index.php”)并且尚未能够对其进行测试。
    • 接受了答案。再次感谢您的帮助。
    猜你喜欢
    • 2013-03-24
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多