我试图检查元素是否存在,我才可以执行此行:检查是否存在元素 - 硒/ 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。 –