javascript - 使用 Protractor 获取同一元素的不同值的数组

标签 javascript selenium-webdriver jasmine promise protractor

我正在尝试测试一个使用人力车和 d3 显示图形的应用程序。测试是使用 Protractor 和 Jasmine 实现的。作为旁注,我认为这个问题并不是真正针对这个用例,而是更通用。

因此,测试应该将鼠标悬停在图表上并收集为每个点显示的文本 (example)。然后将此数组与给定数组进行匹配。

我希望这个伪代码能说明问题:

var graph = ... //
var promises = [];
var promise = graphElement.getSize().then(function(size){
    _.times(size, function(i) {
        moveMouse(i, 0); // move mouse to i-th pixel
        promises.push(graph.element(by.css('.hover-text')).getText());
    });
    return promises;
});

promise.magicallyWaitForAllOfThem();

_.each(promises, function(textPromise){
    expect(textPromise).toBe('something');
});

所以,问题是因为我需要先解决大小,所以我没有办法等待所有 promise 解决并返回稍后可以与 expect() 一起使用的文本 promise 数组。

编辑:明确提到 Protractor/ Jasmine 。

最佳答案

你不能简单地使用 selenium webdriver 的 promise.all 吗?

var graph = ... //
var webdriver = require("selenium-webdriver");

graphElement.getSize().then(function(size){
    var promises = [];
    _.times(size, function(i) {
        moveMouse(i, 0); // move mouse to i-th pixel
        promises.push(graph.element(by.css('.hover-text')).getText());
    });
    return webdriver.promise.all(promises);
}).then(function(promiseResultArray){
    _.each(promiseResultArray, function(textPromise){
        expect(textPromise).toBe('something');
    });
});

更简洁的方式:

声明它:

collectHoverText: function(elem) {
  var strings = [];
  var promises = [];

  return elem.getSize().then(function(size) {
    _.times(0/*logic for number of steps*/, function(i) {
      var x = 0; // logic for step
      browser.actions().mouseMove(elem, {x: x, y: 0}).perform();
      promises.push(elem.element(by.css('.hover-text')).getText().then(function(text) {
        strings.push(text);
      }));
    });

    return protractor.promise.all(promises).then(function() {
      return _.uniq(strings);
    });
  });

并使用它:

var hoverTextPromise = collectHoverText(graph);
expect(hoverTextPromise).toContain('value'); // resolved array here

关于javascript - 使用 Protractor 获取同一元素的不同值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622195/

相关文章:

javascript - 如何让下拉菜单在点击时打开/关闭而不是悬停?

xpath - 此xpath及其包含函数如何在以下xpath中工作

java - Firefox Webdriver Selenium "No protocol specified"、Debian(Wheezy)、服务、脚本

jasmine - Jest 中的describe 和it 有什么区别?

javascript - Protractor 中的 Jasmine 助手

Javascript如何使对象出现在背景图像上

javascript - Node.js MongoDB .findOne 在查询字符串时返回最佳匹配

javascript - 使用 javascript 创建 jsonstring

c# - Selenium 。前面的调出窗口

javascript - 您如何在浏览器中模拟文件选择器以进行单元测试?