如何使用硒处理 Phptravels.net 网站上的下拉菜单



我在网站上使用下拉菜单的句柄有一些大问题 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");
}
}

我的问题是,我应该如何更改单击我的帐户下拉菜单和选择选项方法以使测试正确?感谢您的帮助!

试试这个:

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不正确。我已经修复了它们。

您需要更改一些定位器

xpath上使用css 选择器始终是一种很好的做法。

为此:

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

使用这个 :

@FindBy(css= "li#li_myaccount>a[aria-expanded]")
private WebElement dropDownMenu;  

为此:

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

使用这个 :

@FindBy(css= "div#collapse ul.navbar-right li#li_myaccount li>a")
private WebElement dropDownMenuOptions;  

在这种方法中,使用它就像:

List<WebElement> options = DriverManager.getWebDriver().findElements(By.cssSelector("div#collapse ul.navbar-right li#li_myaccount li>a"));
for(WebElement o: options) {
if(o.getText().trim().contains("Login")) {
o.click();
}
}   

最新更新