我在https://www.phptravels.net/网站上的下拉菜单中有句柄问题。

我写了这个测试,但是它不起作用,我也不知道如何正确进行测试。

public class HomePage {

    private Logger logger = LogManager.getRootLogger();

    @FindBy(xpath = "//*[@id=\"li_myaccount\"]/ul")
    private WebElement dropDownMenu;

    @FindBy(xpath = "//*[@id=\"li_myaccount\"]/ul/li")
    private WebElement dropDownMenuOptions;

    public HomePage() {
        PageFactory.initElements(DriverManager.getWebDriver(), this);
    }

    public void clickOnMyAccountDropMenuAndSelectOption(String option) {
        WaitForElement.waitUntilElementIsVisible(dropDownMenu);
        dropDownMenu.click();

        List<WebElement> options = DriverManager.getWebDriver().findElements(By.xpath("//*[@id=\"li_myaccount\"]/ul/li"));

        for(WebElement o: options) {
            if(o.getText().equals(option)) {
                o.click();
                return;
            }
        }
    }

    public void clickOnLoginLink() {
        WaitForElement.waitUntilElementIsClickable(loginLink);
        loginLink.click();
        logger.info("Clicked on Login link");
    }
}


我的问题是我应该如何更改clickOnMyAccountDropMenuAndSelectOption方法以使测试正确?谢谢你的帮助!

最佳答案

尝试这个:

public class HomePage {

  private Logger logger = LogManager.getRootLogger();

  @FindBy(xpath = "//nav//*[@id='li_myaccount']/a")
  private WebElement dropDownMenu;

  @FindBy(xpath = "//nav//*[@id='li_myaccount']/ul/li/a")
  private WebElement dropDownMenuOptions;

  public HomePage() {
    PageFactory.initElements(DriverManager.getWebDriver(), this);
  }

  public void clickOnMyAccountDropMenuAndSelectOption(String option) {
    WaitForElement.waitUntilElementIsVisible(dropDownMenu);
    dropDownMenu.click();

    Thread.sleep(2000); // wait 2 seconds until dropdown loads
    List<WebElement> options = DriverManager.getWebDriver().findElements(By.xpath("//nav//*[@id='li_myaccount']/ul/li/a"));

    for(WebElement o: options) {
      if(o.getText().equals(option)) {
        o.click();
        return;
      }
    }
  }

  public void clickOnLoginLink() {
    WaitForElement.waitUntilElementIsClickable(loginLink);
    loginLink.click();
    logger.info("Clicked on Login link");
  }
}


您的xPaths不正确。我已经解决了。

07-28 02:03
查看更多