当前位置: 首页 > 知识库问答 >
问题:

量角器——如何获取被点击的< a >标签的文本

逄嘉禧
2023-03-14

换句话说,我刚刚成功地选择了一个下拉选项;然而,我现在想断言,选项< 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);
	});
    });
});

共有1个答案

习阳
2023-03-14

您在控制台上看到的是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,我无法识别有效标签的位置。我只想访问激活的窗口小部件内容。 是否使用了正确的小部件? 问题答案: 要从标签中获取值,可以使用方法,该方法可用于获取任何配置选项的