javascript - protractorjs 中的 browser.wait 调用过多

标签 javascript selenium asynchronous selenium-webdriver protractor

我测试注销流程的测试步骤是,

1) 单击注销按钮

2) 等待 url 更改为 login.html

3) 等待登录页面文本字段加载。

代码看起来像,

//wait for logout menu/button    
browser.wait(function(){
  return element(by.buttonText('Log out')).isPresent()
})
element(by.buttonText('Log out')).click()
//wait for url to change to login.html
browser.wait(function(){
  return browser.getCurrentUrl().then(function(url){
    return url.indexOf("login") != -1
  })
})
//wait for login page text boxes
browser.wait(function(){
  return element(by.css('[type=text]')).isPresent()
})

这使得我的代码变得冗长,因为我将每个操作包装在 browser.wait 调用中。 有没有办法可以避免 browser.wait。我尝试添加,

browser.manage().timeouts().implicitlyWait(5000)

但是随后,我收到 No element found using locator: by.buttonText("Log out") 错误。

最佳答案

Protractor 已内置ExpectedConditions检查,您不必一直自己编写自定义函数。以下是如何等待元素可见 -

var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.buttonText('Log out'))), 10000); //Checks only if element is present in DOM
browser.wait(EC.visibilityOf(element(by.buttonText('Log out'))), 10000); //Checks if element is present in DOM and visible to user on page

您还可以创建自定义函数,如另一个答案中所示。希望这会有所帮助。

关于javascript - protractorjs 中的 browser.wait 调用过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916699/

相关文章:

javascript - javascript中的两次返回是什么意思?

python - 无法使用 Selenium for Python 打开 Chrome WebDriver

Python - Selenium Chrome Webdriver 没有像 WidevineCDM 这样的组件

c# - 多次调用相同的方法并显示进度

javascript - 如何打开模态 onclick?

javascript - 使用搜索栏在列中过滤具有重复条目的区分大小写的数据并返回该特定行 AngularJS

javascript - processing.js 如何检测浏览器的大小?

testing - Selenium RC - t.replace 不是函数

c# - 如何在异步等待 WEB API 中使用 FirstOrDefaultAsync()

python - 如何减慢异步 API 调用以匹配 API 限制?