当前位置: 首页 > 面试题库 >

量角器:“等待”不适用于“ element.all”

谷梁涵忍
2023-03-14
问题内容

我编写了量角器自动化测试并遇到了问题。Wait命令实际上并不等待数组元素之一。请参阅以下示例:导航到网页后,我尝试等待第一个元素。

var category = element.all(by.repeater('category in listCtrl.categories'));
var category2 = $$('.category-name.custom-tooltip-link.ng-binding');
var EC = protractor.ExpectedConditions;

describe('wait for the first category', function() {

    it('wait', function() {
        browser.get('http://www.deep.mg/');

        browser.wait(EC.visibilityOf(category.get(0)), 20000);

        browser.wait(EC.visibilityOf(category2.get(0)), 20000);
    });
});

但是测试失败,并显示以下错误:Failed: Index out of bound. Trying to access element at index: 0, but there are only 0 elements that match locator by.repeater("category in listCtrl.categories")

错误与定位器类型无关,因为它同时出现在:“ by.repeater”和“ by.css”上。选择器还可以,添加“ sleep”命令后测试通过:

var category = element.all(by.repeater('category in listCtrl.categories'));
var category2 = $$('.category-name.custom-tooltip-link.ng-binding');
var EC = protractor.ExpectedConditions;

describe('wait for the first category', function() {

    it('wait', function() {
        browser.get('http://www.deep.mg/');

        browser.sleep(15000);

        browser.wait(EC.visibilityOf(category.get(0)), 20000);

        browser.wait(EC.visibilityOf(category2.get(0)), 20000);

        category.count().then(function(count1) {
            console.log(count1);  //count returns 5, which means there are actually elements in array
        });

        category2.count().then(function(count2) {
            console.log(count2);
        });
    });
});

另外,timeout参数也无济于事,它会忽略它并立即失败。

那么问题是如何等待数组的某个元素?我想念什么吗?谢谢。


问题答案:

设置 自定义的“期望条件” 以等待数组中元素的数量大于0:

function presenceOfAll(elementArrayFinder) {
    return function () {
        return elementArrayFinder.count(function (count) {
            return count > 0;
        });
    };
}

用法:

browser.wait(presenceOfAll(category), 10000);
browser.wait(presenceOfAll(category2), 10000);

为我工作。



 类似资料:
  • 铬:58.0.3029.81 量角器:5.1.1 WebDriver-Manager:12.0.4 Chrome驱动程序:2.29 节点:6.9.4

  • 我有节点14.13.0,并且即使使用,top-level wait也不能工作。 我做错了什么?

  • 问题内容: 我在使用量角器时遇到了一些麻烦。我有一个非常奇怪的ui- router状态,很难摆脱其他元素来开始使用该页面。有没有办法告诉量角器等到元素最终出现在DOM中?不可见/未显示,但实际上已创建?我一直尝试使用等待元素,但是显然无法选择它。 问题答案: 您应该能够与ExpectedCondition一起使用:

  • 问题内容: 当隐式等待少于显式等待时,就会发生误解: 总时间:8.613秒。隐式设置等待第二个较低:3000,结果为6.865秒。它是如何工作的?预先感谢! 问题答案: 那是个好问题。许多优秀的QA自动化专家为此大吃一惊。 隐式等待 每个上都有特殊的隐藏自动等待。如果在页面DOM结构中找不到元素,则原始Web驱动程序(js,python,java)会引发NoSuchElementException

  • 我有一个带有输入框和用户界面选择下拉列表的表单,在ng-blur事件中,我调用了一个方法来自动选择所有三个用户界面选择中的选项。当我使用量角器e2e测试执行此操作时,它不会等待用户界面选择发生并提交表单,这会引发异常,因为它没有找到只有在提交包含所有必需字段的表单后才会出现的元素。我试过这样browser.wait 它正在抛出异常。

  • 问题内容: 似乎是一个非常基本的问题,但我无法正确使用语法。 我想要的是显示id不是-1的所有问题。我究竟做错了什么。谢谢! 问题答案: 语法稍有不足,请尝试: 看到一点JSFiddle:http : //jsfiddle.net/U3pVM/3845/ 编辑: 变量示例: