换句话说,我刚刚成功地选择了一个下拉选项;然而,我现在想断言,选项< code>text是预期的值。
注意,我用< code > element switcher . element(by . linktext(option))选择了下拉选项值。单击下面的():
js lang-js prettyprint-override">this.selectDropdown = function (name, option, uniqueId) {
var elem = element(by.id(uniqueId));
var elementSwitcher = elem.element(by.css("div[uib-dropdown]"));
elementSwitcher.element(by.css("button[uib-dropdown-toggle]")).click();
elementSwitcher.element(by.linkText(option)).click().then(function () {
var el = elementSwitcher.element(by.tagName('a')).getText();
console.log('*** JUST CLICKED. el text = ', el);
});
};
并且呈现的 HTML 看起来像这样:
<div class="btn-group dropdown open" uib-dropdown="">
<ul class="dropdown-menu accounts-dropdown" uib-dropdown-menu="" aria-labelledby="simple-dropdown">
<li ng-repeat="accountChoice in ctrl.accountOptions" class="ng-scope">
<a ng-click="ctrl.selectOption(accountChoice)" class="ng-binding">Assets</a>
</li>
</ul>
</div>
问题是,我无法访问我期望的资产
文本,我的console.log()
告诉我:
W/element - more than one element found for locator By(css selector,
a) - the first result will be used
*** JUST CLICKED. el text = ElementFinder {
browser_:
ProtractorBrowser {
controlFlow: [Function],
同样,我想单击下拉元素(a
标签),然后获取单击的同一a
标签的text
部分。
建议是值得赞赏的。
****更新****
根据Alex下面的回答,我发布了我的最后一个助手函数:
/**
* Helper function to select an angular-ui dropdown option, and return the <a> link text which was selected.
*
* @param name
* @param option
* @param uniqueId
*
* @returns {Promise} A promise that returns the link text when resolved.
*/
this.selectUibDropDownOption = function (name, option, uniqueId) {
var deferred = protractor.promise.defer();
var elem = element(by.id(uniqueId)); // i.e. by.id('drpAccount')
var elementSwitcher = elem.element(by.css("div[uib-dropdown]"));
elementSwitcher.element(by.css("button[uib-dropdown-toggle]")).click();
// i.e. by.linkText('Liabilities and Equity')
//elementSwitcher.element(by.linkText(option)).click(); // also works, but doesn't get link text
var link = elementSwitcher.element(by.linkText(option));
// Important to first get the text of the <a> tag, then click on the link.
link.getText().then(function (linkText) {
link.click();
deferred.fulfill(linkText);
});
return deferred.promise;
};
从调用函数中,定义了我的描述/it
:
var specItem = it(item.name, function () {
item.search.map(function (srchItem) {
// i.e. { "name": "Account", "option": "Assets", "uniqueId": "drpAccount" },
var optionText = pageObjects.selectUibDropDownOption(srchItem.name, srchItem.option, srchItem.uniqueId);
optionText.then(function (linkText) {
console.log('** Clicked on: ', linkText);
expect(srchItem.option).toEqual(linkText);
});
});
});
您在控制台上看到的是promise的字符串表示形式-getText()
返回一个promise。如果要查看实际链接文本值,请解决以下问题:
elementSwitcher.element(by.tagName('a')).getText().then(function (linkText) {
console.log('*** JUST CLICKED. el text = ', linkText);
});
// or elementSwitcher.element(by.tagName('a')).getText().then(console.log);
此外,如果出现“过时元素引用”或“未找到元素”错误,您可能需要在实际单击链接之前获取文本。
或者,为什么不这样做呢?通过链接文本查找链接,获取文本并单击它:
var link = elementSwitcher.element(by.linkText(option));
link.getText().then(function (linkText) {
console.log(linkText);
link.click();
});
我尝试了很多事情,我尝试了等待浏览器和不等待浏览器。但每次它就是不想看到警报。 SO的这篇文章似乎正是我的问题:量角器:测试引导警告,但也没有解决我的问题。 这是弹出的html代码: 我使用async/await来确保程序等待,因此下面代码中的所有函数都是异步函数。所以我尝试这样做(也没有catch,并且有一个额外的函数用于超时)。这是页面对象内的一个方法,因此它返回值: (脚本1) 像这样,这个
本文向大家介绍js a标签点击事件,包括了js a标签点击事件的使用技巧和注意事项,需要的朋友参考一下 当我们在处理a标签上的点击事件时发现即使href=""里面为空,点击事件的效果也不明显,这种情况该如何处理呢?常见的处理方法有以下几种: 1.a href="javascript:void(0);" rel="external nofollow" onclick="method()" 这种方法是
问题内容: 在量角器的文档中,我看到以下示例: 此处显而易见的是,您可以使用“ by.model”在输入框中设置值,但是如果您要查看输入框并查看其中的内容,则需要使用“ by.binding”。 我有一组代码(摘要)在其中执行: (在我的真实代码中,我保存了实体,然后在编辑模式下返回了该实体,并且我正在检查我的值是否已保存。但是它仍然归结为同一件事,并且此示例代码也存在相同的问题)。 这给我一个错
在量角器的文档中,我看到了下面的例子: 这里看起来很清楚的是,您可以使用“by.model”在输入框中设置值,但是如果要查看输入框并查看其中的内容,则需要使用“by.binding”。 我有一组代码,其中(总结)我这样做: (在我的真实代码中,我保存实体,然后在编辑模式下返回它,并且我正在检查我的值是否实际保存。但它仍然归结为同样的事情,这个示例代码给出了同样的问题)。 这给了我一个错误: 理论上
我有一个元素,只有当我悬停在它上面时才可见。 我编写了以下代码来覆盖面板,以便元素可见。 现在我试着点击它,但它说-ElementNotVisibleError:量角器中的元素不可见错误。 基本场景是,我想将鼠标悬停在面板上,然后单击隐藏元素,因为该元素在悬停之前是不可见的。
问题内容: 我将列出用户将从中选择的地址列表,然后将返回地址文本。我需要使用,因为不允许换行。 在Label类中,踢球者没有类似方法… 我知道我可以做类似的事情: 但是,我有一个5-20地址的列表,其中包含多个单独的,这将很困难b / c,我无法识别有效标签的位置。我只想访问激活的窗口小部件内容。 是否使用了正确的小部件? 问题答案: 要从标签中获取值,可以使用方法,该方法可用于获取任何配置选项的