Java 中的 Selenium:无法在亚马逊上找到元素

Selenium in Java: Not able to locate element on Amazon

我正在尝试获取亚马逊上任何产品的评级文本,但我无法编写正确的代码。我不明白我在这里做错了什么。在这里它甚至无法找到元素。 我也不认为 xpath 是错误的,因为我检查了 Firepath。

代码如下:

public static void main(String args[])
{
    System.setProperty("webdriver.gecko.driver", "D:\Eclipse and workspace\eclipse\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();

    driver.get("https://www.amazon.in/");

    WebElement elem = driver.findElement(By.id("twotabsearchtextbox"));

    elem.sendKeys("Camera DSLR");

    driver.findElement(By.className("nav-input")).click();


    WebDriverWait wait = new WebDriverWait(driver,10);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='result_0']/div/div/div/div[2]/div[3]/div[2]/div[1]/span/span/a/i[1]/span")));

    WebElement elem2 = driver.findElement(By.xpath(".//*[@id='result_0']/div/div/div/div[2]/div[3]/div[2]/div[1]/span/span/a/i[1]/span"));
    elem2.getText();

}

请帮帮我。

你想要获取的 span 元素包含像 "4.4 out of 5 stars" 这样的文本,但实际上你看到的只是一个带星星的图标,所以使用 visibilityOfElementLocated 条件是个坏主意,因为它无论如何都看不到。

尝试使用 presenceOfElementLocated 代替:

WebElement elem2 = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//a[@class='a-popover-trigger a-declarative']//span[@class='a-icon-alt']")));
elem2.getAttribute("textContent");

请注意,要获取不可见范围的文本内容,您应该使用 getAttribute("textContent") 而不是 getText()

  1. 使用动态 xpath 而不是绝对 xpath:

By.xpath("//*[contains(@class,'a-icon-star')]//*[contains(@class,'a-icon-alt')]")

以及

  1. 使用 presenceOfElementLocated 而不是 visibilityOfElementLocated,因为工具提示被设计为不可见。

  2. 对工具提示等不可见元素使用 textContent 属性,而不是 getText()