簡體   English   中英

為什么這兩個元素定位器調用的行為不同?

[英]Why do these two element locator calls behave differently?

我正在使用 JavaScript 編寫 webdriver 自動化來測試 web 應用程序。 我的代碼如下所示:

var selenium = require('selenium-webdriver');
By = selenium.By;
until = selenium.until;

driver = new selenium.Builder().
  withCapabilities(selenium.Capabilities.chrome()).
  build();

getItems = async function() {
  try {
    var itemsXpath = '[xpath expression]';
    var items = await driver.findElements(By.xpath(itemsXpath));
    console.log(items.length + ' items found');
    ...
  }
  catch(err) {
    console.log(err);
  }
}

這成功了。 但是,如果我將await行替換為:

var items = await driver.wait(until.elementsLocated(By.xpath(itemsXpath)),60000);

它沒有按預期執行。 既不顯示以下console.log() ,也不顯示catch()塊中的那個。

通過閱讀文檔,我的印象是,如果頁面上有與 XPath 定位器匹配的項目,則這些函數中的任何一個都可以工作,並返回元素。 但是,如果元素不在頁面上,則第二個公式將等待它們出現(在這種情況下最多 60000 毫秒)。

請注意,第二種編寫方式不起作用,即使在調用getItems()時項目已經在屏幕上。 此外,程序完成的時間少於driver.wait()中指定的超時時間。

我對它的工作原理有什么誤解,以至於這種行為實際上是有意義的嗎? 如果是這樣,誰能澄清這里發生了什么?

你寫的那行:

var items = await driver.findElements(By.xpath(itemsXpath));

如果給定的 xpath 與任何元素匹配,將檢查元素並返回Array<WebElement>

但是您使用的等待方法:

var items = await driver.wait(until.elementsLocated(By.xpath(itemsXpath)),60000);

不會返回任何元素。 它只是等到元素位於 DOM 中。

無論如何,您已經指定了 60 秒來使用elementLocated方法查找元素。 此行將等待最多 60 秒來查找與您的 xpath 匹配的元素。 如果指定的 xpath 在 60 秒內與任何元素匹配,它將簡單地結束該特定時間的等待並移至下一行。 請注意,在這種情況下不會有任何錯誤。 因此,沒有機會去抓塊。

您可以參考此頁面以獲取更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM