【问题标题】:Selenium- How to check if element is present or notSelenium-如何检查元素是否存在
【发布时间】:2011-12-29 14:37:58
【问题描述】:

考虑以下场景:-

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

关联 第一册

<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:等待操作完成超时

谢谢。

【问题讨论】:

  • 您在处理弹出窗口吗?您需要明确选择弹出窗口以对其执行任何操作,然后您需要明确选择父窗口

标签: java selenium


【解决方案1】:

您可能会遇到竞争状况。

如果页面发生变化

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

和循环

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

那么 itemDetails 可能不再属于 DOM,您将收到 StateElementReferenceException。

here 描述了一个类似的问题。您可以尝试明确地等待页面处于不会更改的状态(可能使用WebDriverWait)。

【讨论】:

    【解决方案2】:

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

    int elementCount = fireFoxDriver.findElements(By.id("abc")).Count;

    for (int i = 0; i

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

    }

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 2018-01-23
      • 2021-05-17
      • 2023-03-09
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      相关资源
      最近更新 更多