【问题标题】:Issue with select tag in IE with Protractor使用量角器在 IE 中选择标签的问题
【发布时间】:2015-07-21 14:20:10
【问题描述】:

我使用 IEDriverServer(32 位)在 Selenium 上运行量角器测试。我遇到了一些<select> 标签未被点击并显示其选项的问题。

这是我的 conf.js:

exports.config = {
// The address of a running selenium server.
seleniumAddress: 'http://localhost:4444/wd/hub',

// Capabilities to be passed to the webdriver instance.
multiCapabilities: [
    {
        browserName: 'internet explorer',
        ignoreProtectedModeSettings: true,
        ignoreZoomSetting: true,
        nativeEvents: false
    }
    //,
    //{
    //    browserName: 'chrome'
    //}
],
baseUrl: String(process.env.COMPUTERNAME.toLowerCase()) === String('build') ? 'http://dev/' : 'http://' + process.env.COMPUTERNAME + '/',

// can use 'suites' instead of 'specs' - check api documentation
suites: {
    dashboard: 'dashboard/myCallbacksWidget_spec.js',
    employees: 'employees/employees_spec.js',
    lead: 'lead/lead_spec.js',
},

// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 80000
},

allScriptsTimeout: 80000,

onPrepare: function () {

    browser.driver.manage().window().maximize();

    if (process.env.TEAMCITY_VERSION) {
        require('jasmine-reporters');
        jasmine.getEnv().addReporter(new jasmine.TeamcityReporter());
    };
    //var ScreenShotReporter = require('protractor-screenshot-reporter');
    var ScreenShotReporter = require('protractor-html-screenshot-reporter');
    var path = require('path');
    jasmine.getEnv().addReporter(new ScreenShotReporter({
        baseDirectory: 'tmp/report',
        pathBuilder: function pathBuilder(spec, descriptions, results, capabilities) {
            return descriptions.join('-');
        }
        //takeScreenShotsOnlyForFailedSpecs: true
    }));
   }
};

这是我的测试:

describe('Lead Details Test', function () {
var arrowDown = '\uE015';

it('should open the first lead', function () {
    browser.get('Slate.Iva/#/search-leads');

    var firstItem = element(by.repeater('row in renderedRows').row(0));
    firstItem.evaluate('onDblClickRow(row)');

    expect(element(by.id('leadName')).isPresent()).toBe(true);
});

it('should select reason for difficulty', function () {
    var reasonForDifficulty = element(by.id('reasonForDifficultySelect'));
    expect(reasonForDifficulty.isPresent()).toBe(true);
    reasonForDifficulty.click().sendKeys(arrowDown).sendKeys(protractor.Key.ENTER);

    var saveButton = element(by.id('saveLead'));
    saveButton.click();

    browser.refresh();

    var firstOption = element.all(by.options('item.id as item.name for item in leadData.reasonForDifficultyTypes')).first();
    expect(firstOption.getText()).toEqual('Cosmetic Surgery');
  });
});

当我执行reasonForDifficulty.click() 时,它会突出显示<select>,但sendKeys 似乎不起作用。

如果<select> 是选定的下拉菜单,则此代码有效。

我正在使用 Protractor 2.0.0、Selenium 2.45.0 和 IEDriverServer 2.45.0.0。我也在 Windows 8.1 上运行并拥有 IE11。

是否有解决方法或者我的代码中遗漏了什么?

【问题讨论】:

  • 它是否与 .sendKeys(protractor.Key.ARROW_DOWN) 一起使用?编辑:或者,您可以通过执行类似于以下 var value = 'it was too hard'; 的操作在下拉列表中选择选项reasonForDifficulty.element(by.cssContainingText('option', value)).click()
  • 嗨@Sirk,这行得通:var value = 'it was too difficult'; reasonForDifficulty.element(by.cssContainingText('option', value)).click() 你能把这个添加为答案,我会接受。谢谢。

标签: angularjs internet-explorer selenium webdriver protractor


【解决方案1】:

根据我的评论,以下应该有效;

var value = 'It was too difficult';
reasonForDifficulty.element(by.cssContainingText('option', value)).click();

这将选择下拉选项“太难了”,如果您正在测试特定选项对您的应用程序的影响,这很好。

或者,如果你想按数字来做,你可以使用

 var optionNum = 5
 var options = reasonForDifficulty.all(by.tagName('option'))
    .then(function(options){
      options[optionNum].click();
    });

第二个将在下拉列表中选择第 6 个选项(0 是第一个),如果您不关心选择了什么选项,这是一个不错的选择,如果您正在测试数据不断变化的应用程序,它使您的测试更加健壮(在我看来)。

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 2015-06-12
    • 1970-01-01
    • 2022-01-08
    • 2011-05-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多