Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Selenium中将子元素添加到html中后,在页面对象中找不到它们_Java_Selenium_Internet Explorer 11 - Fatal编程技术网

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谢谢你更详细的回答