gpt4 book ai didi

java - 元素位置中的 Xpath 问题

转载 作者:行者123 更新时间:2023-12-02 10:09:35 25 4
gpt4 key购买 nike

对于我选择的元素,我得到了一个非常长的 xpath。有什么办法可以缩短它吗?这是我得到的 xpath:

//li[@class='menu_men 1-level hasChild']//div[contains(@class,'level-2')]//div[@class='menu-wrapper']//ul[@class='level-2']//li[@class='1-level']//div[@class='level-3']//ul[@class='level-3']//li//a[@class='level-3'][contains(text(),'Socks')]

这是网址:Calvin Klein Singapore我将鼠标悬停在“MEN”上,将出现配件部分,然后将鼠标悬停在“ socks ”上以获取 xPath。

我在代码中收到以下执行,我想知道长 xpath 是否可能是原因之一:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//li[@class='first menu_men 1-level hasChild']//div[contains(@class,'level-2')]//div[@class='menu-wrapper']//ul[@class='level-2']//li[@class='1-level']//div[@class='level-3']//ul[@class='level-3']//li//a[@class='level-3'][contains(text(),'Socks')]"}

我正在使用 chrome 开发人员工具中的cropath 来获取xPath。

我是自动化新手,我真的希望有人能提供建议。谢谢。

@SameerArora 这是我必须清除弹出窗口的代码,正如我在下面的评论中提到的那样。

//for clearing the popup window
@FindBy(how=How.XPATH,using="//*[starts-with(@id,'popup-subcription-closes-link-')]")
public WebElement newsletterpopup;

public String clickCategory(){
//.....
resusableFunctions.buttonClick(driver, newsletterpopup, "popoup");
}
public void buttonClick(WebDriver driver, WebElement element, String elementName) throws InterruptedException
{
try
{
element.click();
System.out.println("Log: ResuableFunction.buttonClick");
}
catch (org.openqa.selenium.ElementNotInteractableException notInteract)
{}

最佳答案

可以使用 xpath 找到您要查找的元素:

WebElement element = driver.findElement(By.xpath("(//a[contains(text(),'Socks')])[1]"));

但是,由于打开链接时该元素不直接可见,因此您会收到 NoSuchElementException 异常,因此要解决此问题,您可以在直接操作页面 div 的元素上使用 javascript click 方法。
除此之外,我可以看到当我第一次打开页面时会出现订阅弹出窗口,因此您需要先关闭该弹出窗口(如果存在弹出窗口),然后使用 JavaScript 单击“Socks”元素点击方法。

你的代码应该是这样的:

List<WebElement> closeSubscriptionPopUp = driver.findElements(By.xpath("//a[contains(@id,'popup-subcription-closes-link')]"));
if (closeSubscriptionPopUp.size() > 0) {
closeSubscriptionPopUp.get(0).click();
}
WebElement sockElement = driver.findElement(By.xpath("(//a[contains(text(),'Socks')])[1]"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", sockElement);

关于java - 元素位置中的 Xpath 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55096278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com