Я пытаюсь получить текст для рейтинга любого продукта на 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();

}

Пожалуйста, помогите мне.

2
Ritesh Gupta 28 Май 2017 в 13:20

2 ответа

Лучший ответ

Элемент 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()

3
Andersson 28 Май 2017 в 10:42
  1. Используйте динамический xpath вместо абсолютного xpath:

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

И, как верно заметил @Andersson,

  1. Используйте presenceOfElementLocated вместо visibilityOfElementLocated, так как подсказки предназначены для невидимости.

  2. Используйте атрибут textContent для невидимых элементов, таких как всплывающие подсказки, вместо getText().

0
Zeeshan Siddiqui 28 Май 2017 в 11:07