繁体   English   中英

硒-如何检查元素是否存在

[英]Selenium- How to check if element is present or not

请考虑以下情形:

一个书店网站上有很多书,每本书都有一些详细信息,例如作者姓名,出版商等。主页显示书的数量,单击页面上的任何书都会打开一个弹出窗口,显示该特定书的详细信息。 html主页面如下所示。

链接书1

<book id="abc">
    <a href="linkAddress">link</a>
    <div class="name">Book 2</div>
</book>

<book id="abc">
    <a href="linkAddress">link</a>
    <div class="name">Book 3</div>
</book>

<book id="abc">
    <a href="linkAddress">link</a>
    <div class="name">Book 4</div>
</book>

<book id="abc">
    <a href="linkAddress">link</a>
    <div class="name">Book 5</div>
</book>

我想获取所有书籍的详细信息,所以我要做的是从主页获取了所有书籍元素的列表

List<WebElement> items = fireFoxDriver.findElements(By.id("abc"));

然后遍历该列表,并逐个单击每个元素以打开一个弹出窗口,其中显示了该书的详细信息

for(WebElement itemDetails : items){
    itemDetails.click();
    //After clicking the element pop-up opens which shows details of this particular book.
    //Get details of this particular book from pop-up.
}

并从该打开的弹出窗口中获取了我所需的详细信息,然后在获取所有必需的详细信息并将其移至下一个元素后关闭了该弹出窗口。

现在的问题是我正在使用itemDetails.click()打开弹出窗口,但有时在打开弹出窗口时出现以下错误。 我不确定如何处理这些错误,请指导我。 主页上有元素,打开弹出窗口时我没有更改主页,但仍然收到DOM错误。

  1. org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM
  2. com.thoughtworks.selenium.SeleniumException:等待操作完成时超时

谢谢。

您可能会遇到竞赛状况。

如果页面在

List<WebElement> items = fireFoxDriver.findElements(By.id("abc"));

和循环

for(WebElement itemDetails : items){
    itemDetails.click();
}

那么itemDetails可能不再属于DOM,您将获得StateElementReferenceException。

这里描述类似的问题。 您可以尝试显式等待,直到页面处于不会更改的状态为止(也许使用WebDriverWait )。

您可以尝试在与每个元素互动之前直接查找每个元素,而不是遍历列表,以免它们过时。 您可以这样使用xpath完成此操作:

int elementCount = fireFoxDriver.findElements(By.id(“ abc”))。Count;

for(int i = 0; i <elementCount; i ++){

firefoxDriver.findElement(By.XPath(String.Format(“ // book [id = \\” abc \\“] [{0}]”,i.ToString())))。click();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM