请仔细阅读示例代码。
Html代码:
<div class="OuterDiv">
<div id="child1">
</div>
<div id="child2" style="display:none">
</div>
</div>
WebDriver代码: -
List<WebElement> list1 = WebDriver.findElements(By.cssSelector("div[class='OuterDiv'] div"));
for(WebElement element : list1)
{
sysout(element.getAttribute("id"));
}
使用此代码我试图获取所有div
的ID,但是display:none
的元素未存储在列表中。所以我无法获得div
的ID。当该元素变得可见时,我必须再次扫描所有元素。即使它是display: none
,我也应该这样做。
答案 0 :(得分:0)
List<WebElement> divList = WebDriver.findElement(By.xpath("//div[class='OuterDiv']")).findElements(By.tagName("div"));
for(WebElement element : divList)
{
if(element.getAttribute("style").equals("display:none"));
{
divList.add(element);
sysout(element.getAttribute("id"));
}
}
答案 1 :(得分:0)
尝试如下: -
WebDriverWait wait = new WebDriverWait(driver, 10);
List<WebElement> list1 = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("div.OuterDiv div")));
for(WebElement element : list1)
{
System.out.println(element.getAttribute("id"));
}
希望它能起作用.. :)
答案 2 :(得分:0)
Selenium旨在与用户所喜欢的元素进行交互。由于用户无法与不可见元素进行交互,因此Selenium不会与它们进行交互。这就是为什么你只能获得你的收藏中的可见元素。有很多方法可以解决这个问题...例如使用JavascriptExecutor
。如果您正在尝试完成用户场景,那么您将希望执行用户将要执行的操作以公开您要访问的元素。例如,打开弹出窗口或展开页面上的部分。这样做会暴露其他隐藏的元素,但仍然保持在用户场景中。使用JavascriptExecutor
正在页面上执行JS,如果您使用它,用户不会这样做,它不再是用户场景,但它有其用途。
答案 3 :(得分:0)
您可以使用外部标记来检索元素,并使用xpath检索所有子元素,如下所示:
WebElement outterDiv = WebDriver.findElement(By.xpath("//div[class='OuterDiv']"));
List<WebElement> innerElements = outterDiv.FindElements(By.Xpath(".//*"));
for(WebElement element : innerElements)
{
sysout(element.getAttribute("id"));
}