悬停后如何定位内部元素(Selenium)
How to locate inner element after hovering (Selenium)
我需要找到并单击“我的帐户”
我可以看到 parent div header-menu-dropdown account-item 然后有一个 child 那个 child 还有另一个 child 包含两个元素,即两个 href 文本
我可能会找到具有 header-menu-item with-link class 的元素数组,然后选择第一个元素来找到我需要的元素,但是有更好的方法吗?
你想要的方式,应该是这样的:
//div[@class='header-menu-item with-link']
然后你可以写:
//div[@class='header-menu-item with-link']/a
或者如果您有一个包含此 header-menu-item with-link
的网络元素
直接使用.//a
和findElement
最佳实践
但就个人而言,我不希望为此使用 xpath
请尝试
linkText
或
partialLinkText
因为您在 achor 标签 中查看的元素,linkText
应该可以工作。
工作解决方案如下(带有 linkText):
@FindBy(linkText = "My account")
private WebElement myAccount;
public MyAccountPage openMyAccountPage() {
Actions actions = new Actions(driver);
actions.moveToElement(username).perform();
actions.moveToElement(myAccount).click().perform();
return new MyAccountPage(driver);
}
首先将鼠标悬停在 个人资料图标/您的姓名上,然后单击 元素。
By myAccountTxt = By.xpath("//a[text()='My account']");
By profileIcon = By.xpath("your profile icon xpath or custom xpath");
// Moving cursor to the profile icon
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(profileIcon));
action.build().perform();
// clicking the my account text
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(myAccountTxt));
wait.until(ExpectedConditions.visibilityOfElementLocated(myAccountTxt));
driver.findElement(myAccountTxt).click();
我需要找到并单击“我的帐户”
我可以看到 parent div header-menu-dropdown account-item 然后有一个 child 那个 child 还有另一个 child 包含两个元素,即两个 href 文本
我可能会找到具有 header-menu-item with-link class 的元素数组,然后选择第一个元素来找到我需要的元素,但是有更好的方法吗?
你想要的方式,应该是这样的:
//div[@class='header-menu-item with-link']
然后你可以写:
//div[@class='header-menu-item with-link']/a
或者如果您有一个包含此 header-menu-item with-link
直接使用.//a
和findElement
最佳实践
但就个人而言,我不希望为此使用 xpath
请尝试
linkText
或
partialLinkText
因为您在 achor 标签 中查看的元素,linkText
应该可以工作。
工作解决方案如下(带有 linkText):
@FindBy(linkText = "My account")
private WebElement myAccount;
public MyAccountPage openMyAccountPage() {
Actions actions = new Actions(driver);
actions.moveToElement(username).perform();
actions.moveToElement(myAccount).click().perform();
return new MyAccountPage(driver);
}
首先将鼠标悬停在 个人资料图标/您的姓名上,然后单击 元素。
By myAccountTxt = By.xpath("//a[text()='My account']");
By profileIcon = By.xpath("your profile icon xpath or custom xpath");
// Moving cursor to the profile icon
Actions action = new Actions(driver);
action.moveToElement(driver.findElement(profileIcon));
action.build().perform();
// clicking the my account text
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(myAccountTxt));
wait.until(ExpectedConditions.visibilityOfElementLocated(myAccountTxt));
driver.findElement(myAccountTxt).click();