我試圖檢查元素是否存在,我纔可以執行此行:檢查是否存在元素 - 硒/ JavaScript的/節點JS
driver.findElement(webdriver.By.id('test'));
這將引發錯誤「沒有這樣的元素」如果文檔中不存在id test
,即使在try
-區塊中。 我找到了Java的答案,您可以檢查大小是否爲0,但是在node-js中,在檢查大小之前會拋出錯誤。
throw error; ^ NoSuchElementError: no such element
我試圖檢查元素是否存在,我纔可以執行此行:檢查是否存在元素 - 硒/ JavaScript的/節點JS
driver.findElement(webdriver.By.id('test'));
這將引發錯誤「沒有這樣的元素」如果文檔中不存在id test
,即使在try
-區塊中。 我找到了Java的答案,您可以檢查大小是否爲0,但是在node-js中,在檢查大小之前會拋出錯誤。
throw error; ^ NoSuchElementError: no such element
您可以利用的then()
可選的錯誤處理程序參數。
driver.findElement(webdriver.By.id('test')).then(function(webElement) {
console.log('Element exists');
}, function(err) {
if (err.state && err.state === 'no such element') {
console.log('Element not found');
} else {
webdriver.promise.rejected(err);
}
});
我找不到它的文件中明確規定,但在webdriver/promise.js
的selenium-webdriver
模塊源確定這個從函數定義:
/**
* Registers a callback on this Deferred.
* @param {Function=} opt_callback The callback.
* @param {Function=} opt_errback The errback.
* @return {!webdriver.promise.Promise} A new promise representing the result
* of the callback.
* @see webdriver.promise.Promise#then
*/
function then(opt_callback, opt_errback) {
這應該是被接受的答案,因爲它是唯一演示如何確定是否存在使用NodeJS Web驅動程序的元素。 – mcranston18
除非操作系統誤用python而不是javascript,否則這應該是正確的答案。投票! – mekdev
在我的情況下,'err'對象沒有「狀態」道具。它會返回這個,如果我控制檯登錄錯誤'{NoSuchElementError:沒有這樣的元素:無法找到元素:{「method」:「css selector」,「selector」:「img」}'。第二個條件返回'TypeError:無法讀取未定義的'承諾' – RZKY
聽起來像是你要檢查是否存在你的屬性,第一:
if (webdriver.By.id) {
driver.findElement(webdriver.By.id('test'));
} else {
console.error("Whoa, webdriver.By.id is not actually a function!");
}
爲什麼不直接使用isElementPresent(locatorOrElement)方法?這裏有一個鏈接代碼:
如預期所選擇的答案沒有工作(err.state
是undefined
和NoSuchElementError
總是拋出) - 儘管使用可選回調的概念,仍然有效。
由於我得到的是與OP引用相同的錯誤,因此在確定目標元素是否存在時,我認爲應該引用NoSuchElementError
。因爲它的名字暗示的是元素不存在時拋出的錯誤。所以在errorCallback的條件應該是:
err instanceof webdriver.error.NoSuchElementError
所以完整的代碼塊將如下(我也是使用那些服用這種語法的優勢async
/await
):
var existed = await driver.findElement(webdriver.By.id('test')).then(function() {
return true;//it existed
}, function(err) {
if (err instanceof webdriver.error.NoSuchElementError) {
return false;//it was not found
} else {
webdriver.promise.rejected(err);
}
});
//handle value of existed appropriately here
你不能只用這個:if(webdriver.By.id('test')){driver.findElement(webdriver.By.id('test')); }。 – JeffreyZ
findElements()和size() – epascarello
@ user2389688 webdriver.by.id(「anything」)似乎總是導致true。 –