一千萬個為什麽

搜索

動態創建值時使用的最佳方法?


我正在尋找關於如何選擇WebElement的一些建議。 當我單擊創建新“頁面”的按鈕時,給定值是動態的,因為它是完全隨機的而不是順序的。我希望它可以遵循:第1頁= 0,第2頁= 1,第3頁= 2等。

默認情況下,我從一個頁面開始。雖然當我觸發按鈕來創建新頁面時,值顯示如下:


所以當我嘗試使用以下內容時:

 List option = chrome.findElements(By.tagName("option"));

    option.get(0).click();
    option.get(1).click();
    option.get(0).click();

它顯然是失敗的,因為值是c277,c346等等,並且無法知道新會話中的值將是什麽,因為它們將始終不同。

stacktrace拋出 StaleElementReferenceException ,因為它不在DOM中。

當值完全隨機時,如何選擇每個頁面?

我正在使用Webdriver和JUnit4。

修改

測試方法:創建一些新頁面。

@Test
public void createANewPage(){
    WebDriverWait wait = new WebDriverWait(chrome, 60);

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("select.j-currentPage.f-feature-A[name=\"currentPage\"]")));

    WebElement newPage = chrome.findElement(By.cssSelector("span.j-addViewBtn.ss-layers"));
    newPage.click();

    List option = chrome.findElements(By.tagName("option"));

    option.get(1).click();

    option.get(0).click();
}

然後幾個測試後我想回調創建的頁面

@Test
public void goToPage(){

    new WebDriverWait(chrome, 60).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("select.j-currentPage.f-feature-A[name=\"currentPage\"]")));
    List option = chrome.findElements(By.tagName("option"));

    option.get(0).click();
    option.get(1).click();
    option.get(0).click();
}

I receive a org.openqa.selenium.StaleElementReferenceException at the point of the third option.get(0).click();

However I feel as though I'm approaching this the wrong way as the values are dynamically created




最佳答案

如果要在DOM中替換您正在交互的元素,這似乎是因為您獲得了陳舊的元素異常,那麽您需要再次找到該元素而不是重新使用現有元素。例如,你會這樣做:

chrome.findElements(By.tagName("option")).get(0).click();
chrome.findElements(By.tagName("option")).get(1).click();
chrome.findElements(By.tagName("option")).get(0).click();

Another option would be to put it in a try/catch block and refresh only if an exception is caught. I found a good example of a generic method of waiting for all of your elements here: https://gist.github.com/djangofan/5112655

是否動態生成元素實際上是無關緊要的,每當元素從DOM中刪除然後重新添加(包括導航到新頁面然後返回到原始頁面)時,都會發生這種情況。

轉載註明原文: 動態創建值時使用的最佳方法?

猜你喜歡