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()
- 使用动态 xpath 而不是绝对 xpath:
By.xpath("//*[contains(@class,'a-icon-star')]//*[contains(@class,'a-icon-alt')]")
以及 、
使用 presenceOfElementLocated
而不是 visibilityOfElementLocated
,因为工具提示被设计为不可见。
对工具提示等不可见元素使用 textContent
属性,而不是 getText()
。
我正在尝试获取亚马逊上任何产品的评级文本,但我无法编写正确的代码。我不明白我在这里做错了什么。在这里它甚至无法找到元素。 我也不认为 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()
- 使用动态 xpath 而不是绝对 xpath:
By.xpath("//*[contains(@class,'a-icon-star')]//*[contains(@class,'a-icon-alt')]")
以及
使用
presenceOfElementLocated
而不是visibilityOfElementLocated
,因为工具提示被设计为不可见。对工具提示等不可见元素使用
textContent
属性,而不是getText()
。