gpt4 book ai didi

javascript - Protractor ElementFinder/ElementArrayFinder 理解

转载 作者:行者123 更新时间:2023-11-30 16:31:26 25 4
gpt4 key购买 nike

看书学AngularJS,有一个简单 Protractor 测试的例子:

    it('Should redirect to #/posts/1/sample-title1', function () {
var posts = element.all(by.repeater('post in posts'));
posts.first().then(function (postElem) {
postElem.findElement(by.tagName('a')).then(function (a) {
a.click();
expect(protractor.getCurrentUrl()).toMatch('/posts/1/sample-title1');
});
});
});

它不起作用并抛出错误:失败:未定义不是函数

不确定哪里出了问题,深入研究 Protractor 文档并找到一个可行的解决方案,即:

it('Should redirect to #/posts/1/sample-title1', function () {
var link = element.all(by.repeater('post in posts')).first().element(by.tagName('a'));
link.click();
expect(browser.getCurrentUrl()).toMatch('/posts/1/sample-title1');
});
});

我很高兴它能工作,但是我不太明白为什么它能工作,文档在这里也不是很有用(或者我现在太累了)。

好像不太明白.findElement和.element的区别

当我换行时:

var link = element.all(by.repeater('post in posts')).first().element(by.tagName('a'));

收件人:

var link = element.all(by.repeater('post in posts')).first().getWebElement().findElement(by.tagName('a'));

它也可以,但是在以下情况下它不起作用:

var link = element.all(by.repeater('post in posts')).first().findElement(by.tagName('a'));

谁能解释一下?提前致谢!

最佳答案

这些功能各有不同。在您的第一种情况下,您得到了 error: Failed: undefined is not a function 因为 .first() 的用法不正确。 first()函数返回一个 ElementFinder 而不是一个 promise 。

  • 这意味着没有使用 .then() 解决它的 promise 。
  • 您可以将它与其他依赖于 ElementFinder 的操作链接起来,例如 element()$$getText() 等。

接下来,你写的行 -

var link1 = element.all(by.repeater('post in posts')).first().element(by.tagName('a'));
var link2 = element.all(by.repeater('post in posts')).first().getWebElement().findElement(by.tagName('a'));
var link3 = element.all(by.repeater('post in posts')).first().findElement(by.tagName('a'));

解释-

  1. .findElement() 在两个实例之上工作,一个是 element另一个是 browserdriver .

    • link1 之所以有效,是因为它有一个 element()(它也是一个 ElementFinder)函数链接到另一个 ElementFinder 及其有效。
    • link2 在语法上是有效的,因为 findElement() 链接到 getWebElement() .如上所述,这是有效的,因为 getWebElement() 返回一个 element
    • 但是您的 link3 不起作用,因为函数/方法的语法链不正确。 findElement() 既没有链接到 element 也没有链接到 browser 实例,而是链接到 ElementFinder 并且所以你在使用它时会遇到错误。
  2. .element()是一个 ElementFinder,因此在单独使用或与其他 ElementArrayFinderElementFinder 链接时可以正常工作。 link1 就是一个例子。 ElementFinder 的有效语法 -

    element(LOCATOR);
    element(LOCATOR1).element(LOCATOR2);
    element.all(PARENT_LOCATOR).element(LOCATOR);

希望对您有所帮助。

关于javascript - Protractor ElementFinder/ElementArrayFinder 理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com