4

У меня есть тесты транспортира, работающие с Selenium, с помощью IEDriverServer (32 бит). У меня возникли проблемы с <select> тегами, которые не были нажаты, и показывая их варианты.Проблема с тегом select в IE с помощью Protractor

Вот мой 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.

Есть ли обходной путь для этого или я что-то пропустил в своем коде?

+0

Работает ли он с .sendKeys (protractor.Key.ARROW_DOWN)? EDIT: альтернативно вы можете выбрать опции в выпадающем меню, выполнив что-то похожее на нижеследующее var value = 'было слишком сложно; reasonForDifficulty.element (by.cssContainingText ('option', value)). Click() – Sirk

+0

Привет @Sirk, это работает: 'var value = 'было слишком сложно';' reasonForDifficulty.element (by.cssContainingText (' option ', value)). click() ' Не могли бы вы добавить это как ответ, и я его приму. Благодарю. – Msinn22

ответ

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, являющуюся первым, конечно) в раскрывающемся списке, это хороший вариант если вам все равно, какой вариант выбран, и лучше, если вы тестируете приложение, где данные постоянно меняются, и это делает ваши тесты более надежными (на мой взгляд).

Смежные вопросы