- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
看书学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 。 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'));
解释-
.findElement()
在两个实例之上工作,一个是 element
另一个是 browser
或 driver
.
link1
之所以有效,是因为它有一个 element()
(它也是一个 ElementFinder)函数链接到另一个 ElementFinder 及其有效。link2
在语法上是有效的,因为 findElement()
链接到 getWebElement()
.如上所述,这是有效的,因为 getWebElement()
返回一个 element
。 link3
不起作用,因为函数/方法的语法链不正确。 findElement()
既没有链接到 element
也没有链接到 browser
实例,而是链接到 ElementFinder
并且所以你在使用它时会遇到错误。 .element()
是一个 ElementFinder,因此在单独使用或与其他 ElementArrayFinder
或 ElementFinder
链接时可以正常工作。 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/
如果我定义一个页面对象myPage: return { myButton: element(by.css('#my-button')) }; 然后在别处执行 isElementPresent 检查
在 Protractor 中,是否有一种方法可以确定 ElementFinder 是否可以通过与所使用的定位器不同的定位器找到?我无法从定位器构造第二个 ElementFinder 并使用 .equa
我们的团队正在讨论是否应该禁止在页面对象中公开“ElementFinder”和“ElementArrayFinder”。 主要原因是西蒙·斯图尔特 (Simon Stewart) 的引用。 Page
我正在寻找一种从测试中扩展 Protractor 的 ElementFinder 类的方法。有没有办法访问 Protractor 的 ElementFinder 类/构造函数,以便我能够从测试中动态扩
element.all() 返回一个网络元素数组。我希望能够进一步处理这些元素。例子是element.all(by.something()).each(函数(行){ var button = row.
看书学AngularJS,有一个简单 Protractor 测试的例子: it('Should redirect to #/posts/1/sample-title1', function (
是否有官方方法来确定我从函数接收的输入是 ElementFinder(单个 Web 元素)还是 ElementArrayFinder(一组网络元素)。 到目前为止我已经知道了。 if (_.isFun
这是 Take elements while a condition evaluates to true (extending ElementArrayFinder) 的后续问题特别是主题和@cvak
鉴于我有 elmFinder 变量: var elmFinder = element(by.css('.thing')); 如果我需要取回 webdriver.Locator,又名定位器策略怎么办?
在使用 protractorJS 进行的一些实验中,我注意到没有简单的方法可以从 Protractor 扩展(继承)ElementFinder 对象以添加自己的函数。 例如,我想创建对象 Checkb
我有一个元素:this.page.taskAssignment,类型为 ElementFinder。在我的 UI 测试中,我单击此元素,但没有任何反应。我怀疑我点击了错误的元素,这就是为什么我想检查点
确定 var 是否为 elementFinder 对象的方法是什么?我现在的做法是检查“.getText()”是否是对象的一部分。但我想看看是否有更好的方法。 if (!el.getText) {
我想创建一个通知错误的通用函数 我似乎找不到从 ElementFinder 成员获取 css 选择器的方法 这是我的功能: static waitForElementToExist(elementFi
在我的测试用例中,我尝试实现助手,以在返回某些项目之前检查元素数组。如果数组不包含元素 - 我需要等待(我在应用程序性能方面遇到一些麻烦,有时列表中的元素加载太长并且同步不起作用)。 我的助手中的功能
尝试从 typescript 中的 Protractor extend ElementFinder 时收到编译警告。 package.json "typescript": "^2.0.0-dev.20
我正在尝试使用 Protractor 运行测试来计算表中的行数。我正在测试的页面有 5 个已加载的表,这些表没有 Id 参数,但它们在各自的表标题行中确实有不同的名称。因此,我提取所有表格元素,然后使
不幸的是,我们必须在当前项目中使用需要 jQuery 的旧库。这些的激活发生在生命周期钩子(Hook)部分“ngAfterViewChecked”中。由于事实上,TypeScript 无法在正确的时间
我是一名优秀的程序员,十分优秀!