javascript – 在Protractor中获取元素属性值

前端之家收集整理的这篇文章主要介绍了javascript – 在Protractor中获取元素属性值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个Protractor测试,必须等待一个元素属性具有非空值,然后我想将该值返回给调用函数.事实证明这比我预期的要难得多!

我能够正确地安排一个browser.wait()命令来等待element属性具有非空值,并且我已经验证了这个值实际上是我期望在回调函数中获得的,但对于某些原因是,我无法在回调函数之外将其返回到测试代码的其余部分.

以下是我的代码的样子:

  1. function test() {
  2. var item = getItem();
  3. console.log(item);
  4. }
  5.  
  6. function getItem() {
  7. var item;
  8. browser.wait(function() {
  9. return element(by.id('element-id')).getAttribute('attribute-name').then(function(value) {
  10. item = value;
  11. // console.log(item);
  12. return value !== '';
  13. });
  14. });
  15. return item;
  16. }

我可以告诉我执行的顺序并不像我预期的那样,因为当我取消注释回调函数中的console.log()调用时,我看到打印出的预期值.但是,test()函数中的相同调用会打印’undefined’.

这里发生了什么?我错过了什么?如何正确地从回调函数获取属性值?

我感谢您的帮助.

解决方法

我不会将wait和getting属性部分组合在一起 – 逻辑上这些是两个独立的东西,将它们分开:
  1. browser.wait(function() {
  2. return element(by.id('element-id')).getAttribute("attribute").then(function(value) {
  3. item = value;
  4. // console.log(item);
  5. return value !== '';
  6. });
  7. });
  8.  
  9. element(by.id('element-id')).getAttribute("attribute").then(function (value) {
  10. console.log(value);
  11. });

请注意,您可以通过以下方式简化等待条件:

  1. var EC = protractor.ExpectedConditions;
  2. var elm = $('#element-id[attribute="expected value"]');
  3.  
  4. browser.wait(EC.presenceOf(elm),5000);
  5. elm.getAttribute("attribute").then(function (value) {
  6. console.log(value);
  7. });

仅供参考,您可能已经解决deferred的当前问题:

  1. function test() {
  2. getItem().then(function (value) {
  3. console.log(value);
  4. });
  5. }
  6.  
  7. function getItem() {
  8. var item = protractor.promise.defer();
  9. browser.wait(function() {
  10. return element(by.id('element-id')).getAttribute('attribute').then(function(value) {
  11. var result = value !== '';
  12. if (result) {
  13. item.fulfill(value);
  14. }
  15. return result;
  16. });
  17. });
  18. return item.promise;
  19. }

猜你在找的JavaScript相关文章