我正在从facebook上获取日期网络元素,并使用下面的代码对其进行循环。
public class select_facebook {
public static void main(String[] args) throws Exception {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.facebook.com");
List<WebElement> days = driver.findElements(By.xpath("//select[@id='day']"));
System.out.println(days.size());
for (int i=0;i<days.size();i++) {
System.out.println(days.get(i));
}
}
}
但是我得到的输出是
1
[[FirefoxDriver: firefox on XP (58765a0e-31a0-40bc-8565-3418ae54682c)] -> xpath: //select[@id='day']]
但是如果我使用System.out.println(days.get(i).gettext());
它列出了所有日期1到31。
那我的问题是,为什么我应该这样称呼
List<WebElement> days = driver.findElements(By.xpath("//select[@id='day']"));
因为甚至webElements的大小仅为:1
System.out.println(days.size());
相反,我可以这样称呼它
WebElement days = driver.findElement(By.xpath("//select[@id='day']"));
答案 0 :(得分:1)
您将获得
的元素列表。List<WebElement> days = driver.findElements(By.xpath("//select[@id='day']"));
因为同一id(“天”)可能有1个以上的元素。
答案 1 :(得分:1)
您应该专注于您真正需要的东西。如果要使用更多元素,请使用FindElements()
,如果您只对一个元素感兴趣,请使用FindElement()
。
如果元素数量更多,并且如果您使用FindElement()
,它将返回您的第一个元素,而其他元素则被忽略。因此,请确保您的要求。
这是因为id值只能分配给一个HTML元素。换句话说,仅在有效的HTML DOM中,多个元素不能在同一页面上具有相同的id值。
FindElement()
会返回WebElement:
WebElement SINGLEELEMENT= driver.findElement(By.SELECTOR("//TAGNAME[@ATTRIBUTENAME='ATTRIBUTEVALUE']"));
FindElements()
会返回WebElement,即多个元素的List<WebElement>
。如果仅存在一个元素,则返回1;如果存在多个,则返回多个:
List<WebElement> LISTOFELEMENTS= driver.findElements(By.SELECTOR("//TAGNAME[@ATTRIBUTENAME='ATTRIBUTEVALUE']"));
您可以在其上循环以获取每个元素并分别进行处理。