【发布时间】:2020-04-17 00:55:19
【问题描述】:
当我运行以下程序时,为什么控制台会打印 '0'?我希望打印“1”,因为我希望 findElements() 方法使用 xpath 找到链接。 xpath 表达式不正确吗?通过选择链接元素并复制给定的 xpath,我使用 Firefox、Firebug 和 Firepath 获得了表达式。
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import java.util.List;
public class SeleniumSearch {
static WebDriver driver = new FirefoxDriver();
public static void main(String[] args) {
try {
driver.get("http://www.google.co.uk/");
submitSearch("selenium");
getHit();
}
finally {
driver.close();
}
}
static void submitSearch(String search) {
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys(search);
searchBox.submit();
}
static void getHit() {
List<WebElement> hits = driver.findElements(By.xpath("html/body/div[5]/div[4]/div[9]/div[1]/div[3]/div/div[3]/div[2]/div/div/div/div[2]/div[1]/div/h3/a"));
System.out.println(hits.size());
}
}
【问题讨论】:
-
XPath 应该返回什么?
-
我希望 XPath 返回第一个 google 搜索结果链接的 web 元素。 (然后我会展开程序以单击 web 元素。)
-
使用html/body/div[1]/div[5]/div[4]/div[7]/div[1]/div[3]/div/div[3]/ div[2]/div/div/div/div[2]/div[1]/div/h3/a 这个xpath uor xpath对我来说看起来不太好,上面的xpath也是由firebug给出的
-
使用 Css 选择器会更简单:By.cssSelector(".r")。请注意,由于内容是动态的,因此您需要等待第一个元素出现。
-
感谢 Florent B。我对 cssSelectors 还不太熟悉,但这个解决方案看起来也简单得多。
标签: java selenium xpath firebug firepath