Java 在Selenium中将子元素添加到html中后,在页面对象中找不到它们
我的程序中有一个循环,它在每次迭代中打印出如下结构:Java 在Selenium中将子元素添加到html中后,在页面对象中找不到它们,java,selenium,internet-explorer-11,Java,Selenium,Internet Explorer 11,我的程序中有一个循环,它在每次迭代中打印出如下结构: <div class="grand-father"> <div class = "father"> <myTag>1</myTag> <button>show more</button> </div> </div> 1. 显示更多 但单击按钮后,结构将更改为: <div class="grand-father"&
<div class="grand-father">
<div class = "father">
<myTag>1</myTag>
<button>show more</button>
</div>
</div>
1.
显示更多
但单击按钮后,结构将更改为:
<div class="grand-father">
<div class = "father">
<myTag>1</myTag>
<myTag>2</myTag>
<myTag>3</myTag>
</div>
</div>
1.
2.
3.
因此,在我对页面对象模型的测试中,我试图通过执行以下操作来评估每个“祖父”元素中的每个myTag元素:
List<WebElement> grandFathers = driver.findElements(By.xpath("//div[@class='grand-father']"));
for(WebElement gf : grandFathers){
//**Click the button of this father element to show more**
List<WebElement> myTagElements = gf.findElements(By.xpath(".//div[@class='father']/myTag"));
System.out.println(myTagElements.size());
}
List grandFathers=driver.findElements(By.xpath(“//div[@class='grandfather']);
for(WebElement-gf:grandFathers){
//**单击此父元素的按钮以显示更多信息**
List myTagElements=gf.findelelements(By.xpath(“../div[@class='father']/myTag”);
System.out.println(myTagElements.size());
}
我的问题是,myTag元素的最后一次findElements似乎没有找到在按下“show more”(显示更多)按钮之前不存在的所有元素:(即使所有元素都已显示,也只计算一个元素:/
有没有办法告诉selenium根据我们第一次获取元素时没有的新html更改来“更新”变量
如果有人能帮忙,谢谢!我通过重构所有代码并在对“父”元素使用findElements时单击“显示更多”按钮解决了这个问题,而不是在对myTag元素使用findElements方法之前。
在处理最终将显示在DOM中的元素时,请记住这一点:首先执行所有涉及显示和处理数据的操作,然后使用Selenium对其进行评估:)看起来您可能已经有了答案,但对于未来的读者,我会这样做 用class
grandfather
抓取所有的DIV
s,在它们之间循环查找child按钮。单击按钮
,然后计数myTag
s
List<WebElement> gfs = driver.findElements(By.cssSelector("div.grand-father"));
for (WebElement gf : gfs)
{
gf.findElement(By.tagName("button")).click();
System.out.println(gf.findElements(By.tagName("myTag")).size());
}
List gfs=driver.findElements(By.cssSelector(“div.grand-father”);
对于(WebElement gf:gfs)
{
gf.findElement(按.tagName(“按钮”))。单击();
System.out.println(gf.findElements(按.tagName(“myTag”)).size());
}
真是个伟人!我就是这么做的:D谢谢你更详细的回答