簡體   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