悬停后如何定位内部元素(Selenium)
Posted
技术标签:
【中文标题】悬停后如何定位内部元素(Selenium)【英文标题】:How to locate inner element after hovering (Selenium) 【发布时间】:2021-11-25 00:06:19 【问题描述】:我需要找到并点击我的帐户
我可以看到父 div header-menu-dropdown account-item 然后有一个孩子,那个孩子有另一个孩子,其中包含两个元素,即两个 href 文本
我可能会找到具有带有链接类的 header-menu-item 的元素数组,然后选择第一个元素来定位我需要的内容,但有更好的方法吗?
【问题讨论】:
//a[text()='我的帐户'] 【参考方案1】:你想要做的方式是这样的:
//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
应该可以工作。
【讨论】:
【参考方案2】:工作解决方案如下(带有链接文本):
@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);
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案3】:首先将鼠标悬停在个人资料图标/您的姓名上,然后点击元素。
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();
【讨论】:
以上是关于悬停后如何定位内部元素(Selenium)的主要内容,如果未能解决你的问题,请参考以下文章
selenium自动化测试中,元素无法点击定位等问题的解决:js的使用方法