我在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
不正确。我已经解决了。