Редактировать значение ячейки пользовательского интерфейса с помощью транспортира

Я использую транспортир для тестирования угловых 1.3.13 и ui-grid 3.0. Все ячейки в сетке доступны для редактирования. В моих тестах я могу получить ячейку, используя следующий метод:

dataCell: function( gridId, fetchRow, fetchCol ) {
    var row = this.getGrid( gridId ).element(by.css('.ui-grid-render-container-body')).element( by.repeater('(rowRenderIndex, row) in rowContainer.renderedRows track by $index').row( fetchRow )  );
    return row.element( by.repeater('(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name').row( fetchCol ));
}

с https://github.com/angular-ui/ng-grid/blob/master/test/e2e/gridTestUtils.spec.js.

После того, как я получаю первую ячейку из первой строки, когда я пытаюсь отправить значение в ячейку

cell.click();
cell.sendKeys("newCellValue");

тестовые перерывы. Я получаю следующее сообщение об ошибке:

    - Failed: unknown error: cannot focus element
    (Session info: chrome=40.0.2214.115)
    (Driver info: chromedriver=2.14.313457
    (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Linux 3.13.0-49-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 35 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'xxxxxxxxx', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-49-generic', java.version: '1.8.0_40'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/tmp/.com.google.Chrome.LHfq2F}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=40.0.2214.115, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 50857fdfa10a4bc75444d21f2d04359e
(Session info: chrome=40.0.2214.115)
(Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Linux 3.13.0-49-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 35 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'xxxxxxxxx', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-49-generic', java.version: '1.8.0_40'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/tmp/.com.google.Chrome.LHfq2F}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=40.0.2214.115, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 50857fdfa10a4bc75444d21f2d04359e
  at /usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:102:16
  at [object Object].promise.ControlFlow.runInFrame_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1877:20)
  at [object Object].promise.Callback_.goog.defineClass.notify (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:2464:25)
  at [object Object].promise.Promise.notify_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:563:12)

Проблема возникает при вызове метода sendKeys. Кто-нибудь знает правильный способ изменить значение ячейки с помощью транспортира?

1 ответ

Решение

Решил это. Вам нужно сфокусировать ячейку и получить доступ к элементу ввода:

cell.click();
cell.element(by.css(".ui-grid-cell-focus input")).sendKeys("newCellValue");

РЕДАКТИРОВАТЬ: Имеет некоторые проблемы на старых версиях браузера, лучше использовать:

cell.click();
cell.element(by.css("input")).sendKeys("newCellValue");

РЕДАКТИРОВАТЬ:

Другая проблема связана с Firefox, где cell.click() не работает должным образом. Обходной путь / взлом: /questions/44885867/kak-vyibrat-optsiyu-v-vyipadayuschih-testah-protractorjs-e2e/44885963#44885963

Другие вопросы по тегам