[英]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.