用量角器按文本选择

Selecting by text with Protractor

本文关键字:选择 文本 量角器      更新时间:2023-09-26

我对java selenium比较熟悉,对JS和Protractor都是新手。假设我正在尝试从具有公共标识符的选项列表中单击一个选项…

var options = $('.options');

我怎样才能得到所有具有相同标识符的元素,然后根据其文本选择一个呢?我不会开车。像我可以在java中查找元素,因为没有对驱动程序的引用。

这是我到目前为止尝试过的,但它不起作用,我认为这是由于我对JS缺乏经验

this.selectCompanyCode = function(companyCode) {
    dropDownMenus[0].click();
    var companyCodeOptions = $('[ng-bind-html="companyCode"]');
    companyCodeOptions.filter(function (elem) {
        return elem.getText().then(function text() {
            return text === companyCode;
        });
    }).first().click();
};

Select all elements with common identifier: $$('.options');选择所有具有.options类的元素——相当于element.all(by.css('.options'))。这将返回一个ElementArrayFinder。关于如何从ElementArrayFinder中通过索引选择元素,请参见.get()。

通过文本查找,可以使用cssContainingText(css, text)。例如,var loginBtn = element(by.cssContainingText('button.ng-scope', 'Login'));

但是,如果由于某种原因,这些没有提供预期的结果,您可以在ElementArrayFinder上使用.filter()(文档在这里)来遍历元素数组并根据您指定的条件查找元素。例如,

var allOptions = $$('.options');
allOptions.filter(function (elem) {
    return elem.getText().then(function (text) {
        return text === 'What you want';
    });
}).first().click();

而且,虽然我从未使用过常规Java Selenium(所以我不知道这是否相同),但确实有browser参考(因此findElements函数):http://www.protractortest.org/#/api?view=ProtractorBrowser。

希望有帮助!

编辑:

使用你的代码:

this.selectCompanyCode = function(companyCode) {
    // where is dropDownMenus defined?  This has function no reference to it.
    dropDownMenus.get(0).click(); // should be this
    var companyCodeOptions = $$('[ng-bind-html="' + companyCode + '"]');
    return companyCodeOptions.filter(function (elem) {
        return elem.getText().then(function text() {
            return text === companyCode;
        });
    }).first().click();
};

第二个编辑:假设公司代码是唯一的,您可能不需要使用过滤器。试试这个:

this.selectCompanyCode = function(companyCode) {
    dropDownMenus.get(0).click();
    var companyCodeOptions = $('[ng-bind-html="' + companyCode + '"]');
    return companyCodeOptions.click();
};

使用cssContainingText

element(by.cssContainingText(".option", "text")).click();

http://www.protractortest.org//api ?视图= ProtractorBy.prototype.cssContainingText