Selenium Webdriver.IO-以非阻塞方式检查元素是否存在

Selenium Webdriver.IO-以非阻塞方式检查元素是否存在,selenium,webdriver,automated-tests,appium,wdio-jasmine,Selenium,Webdriver,Automated Tests,Appium,Wdio Jasmine,菜鸟问题。我正在使用编写端到端测试 我正在使用以下命令检查元素的存在: $(选择器) browser.waitForVisible(选择器、超时、waitforappearordispear) browser.element('selector') 如果找不到元素,它们都会阻止我的测试 如何在不阻塞测试执行的情况下检查元素在特定时刻是否存在 我在(简明的)书里找不到任何东西 另外,这应该可以实现browser.findElement(By.css('[data qa=“some id”]')

菜鸟问题。我正在使用编写端到端测试

我正在使用以下命令检查元素的存在:

  • $(选择器)
  • browser.waitForVisible(选择器、超时、waitforappearordispear)
  • browser.element('selector')
如果找不到元素,它们都会阻止我的测试

如何在不阻塞测试执行的情况下检查元素在特定时刻是否存在

我在(简明的)书里找不到任何东西

另外,这应该可以实现
browser.findElement(By.css('[data qa=“some id”]')但它不是一个wdio命令。(
findElement
By
不可识别)


npm依赖项:

"appium": "^1.10.0",
"appium-doctor": "^1.6.0",
"wdio-appium-service": "^0.2.3",
"wdio-jasmine-framework": "^0.3.8",
"wdio-spec-reporter": "^0.1.5",
"webdriverio": "^4.14.1",

改用findElements-$$.html:

$$(选择器)


如果找不到元素,这将返回一个空数组,但不会导致失败。

好吧,最简单的方法是滥用查询Selenium服务器(使用/)是一个非中断操作的事实

假设您必须查询两个元素,一个在DOM中呈现,另一个没有(或者该元素不完全存在)

这两个变量将包含以下内容:

thisDidnt = { 
  sessionId: '7056961e1950b5c54827a51c137cca96',
  value: { ELEMENT: '0.8611270215748772-1',
           'element-6066-11e4-a52e-4f735466cecf': '0.8611270215748772-1' },
  selector: 'span.coreSpriteFacebookIconInverted',
  _status: 0 
}

thisDidnt = { 
  type: 'NoSuchElement',
  message: 'An element could not be located on the page using the given search parameters.',
  state: 'failure',
  sessionId: '7056961e1950b5c54827a51c137cca96',
  value: null,
  selector: 'span.coreSpriteInstagramIconInverted' 
}
因此,您现在可以继续进行检查

if (thisLoaded.value) {
  // > if element loaded <
} else { 
  // > if element didn't load <
}
if(thisloadded.value){
//>如果元素已加载<
}否则{
//>如果元素未加载<
}


我回家后会加上更多

我不使用这种语言,但通常您会使用findElements(复数),然后检查集合是否为空。如果不是,那么您知道元素存在并可以继续。如果为空,则可以处理该错误案例或逻辑流的分支。谢谢你的回复。到目前为止,我正在使用$$,但由于某些原因,它停止工作(不知何故,我怀疑$$刚刚停止工作。我猜是您以某种方式更改了代码,或者页面已更改,定位器已失败,等等。我会确保您拥有您正在使用的所有库的当前版本,然后再试一次。这行得通吗?这是
wdio-v4
还是
wdio-v5
问题?有d基于WebdriverIO版本,我们推荐了不同的方法来处理手头的任务。您提到的一些方法在最新版本中也看到了关注点的分离。
if (thisLoaded.value) {
  // > if element loaded <
} else { 
  // > if element didn't load <
}