У меня есть динамическая таблица с 2 столбцами и n числом строк. В первом столбце будет заголовок, а во втором столбце будет кнопка для перехода к деталям этого заголовка.
Я хочу пройтись по каждой строке, чтобы найти конкретный текстовый заголовок, и нажать на кнопку второго столбца с этим заголовком.
Я пробовал много способов поиска в Google, но ничего не смог найти.
Код AngularJS для этого в HTML такой, как показано ниже.
<table>
<tbody>
<tr ng-repeat="registration in Registrations | orderBy:'title'" class="tableRow ng-scope">
<td style="padding-left: 20px;" ng-if="reg.title != 'Jabc'" class="ng-binding ng-scope">test</td>
<td style="padding-left: 20px;">
<button ng-click="enter(registration)" class="ng-binding">Enter community</button>
</td>
<tr ng-repeat="registration in Registrations | orderBy:'title'" class="tableRow ng-scope">
<td style="padding-left: 20px;" ng-if="reg.title != 'Jabc'" class="ng-binding ng-scope">test1</td>
<td style="padding-left: 20px;">
<button ng-click="enter(registration)" class="ng-binding">Enter community</button>
</td>
<tr ng-repeat="registration in Registrations | orderBy:'title'" class="tableRow ng-scope">
<td style="padding-left: 20px;" ng-if="reg.title != 'Jabc'" class="ng-binding ng-scope">test2</td>
<td style="padding-left: 20px;">
<button ng-click="enter(registration)" class="ng-binding">Enter community</button>
</td>
</tbody>
</table>
Как показано в приведенной выше таблице, есть три строки.Я хочу выбрать строку по имени для предположения «test1» и хочу нажать на кнопку второго столбца той же строки.
Здесь я получил индекс конкретного текста, который я ищу, написавкод ниже.
let elm = element.all(by.repeater('registration in myRegistrations'));
let index;
elm.getText().then(function(text){
console.log(text);
for(var i=0; i<text.length; i++){
if(text[i] == 'protractor-testing Enter community'){
index = i;
console.log('Community found :: ' + text[i]);
}
}
});
console.log("Index :: " + index);
Теперь по этому индексу я могу нажать на кнопку из строки таблицы = индекс и второй столбец той же строки?
Ниже весь мой сценарий.
Файл conf.js ..
// An example configuration file
var Jasmine2HtmlReporter = require('protractor-jasmine2-html-reporter');
exports.config = {
// The address of a running selenium server.
seleniumAddress: 'http://localhost:4444/wd/hub',
baseUrl: 'http://localhost:' + (process.env.PORT || '9000'),
// Capabilities to be passed to the webdriver instance.
capabilities: {
browserName: 'chrome'
},
params: {
Firstname: 'virus',
Lastname: 'virus',
Email: 'virus@email.com',
Username: 'virus',
Password: 'virus',
TempUsername : 'temp',
TempPassword: 'temp',
AdminUsername: 'admin',
AdminPassword: 'admin',
CreateTitle: 'protractor-testing',
CreateKey: 'protractor-testing'
},
// Spec patterns are relative to the configuration file location passed
// to protractor (in this example conf.js).
// They may include glob patterns.
// specs: ['../spec/2 Login/spec.js'],
suites: {
login: '../spec/2 Login/spec.js'
},
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
showColors: true, // Use colors in the command line report.
},
// onPrepare: function(){
// jasmine.getEnv().addReporter(new Jasmine2HtmlReporter({
// savePath: '../test/reports'
// })
// );
// },
};
Ниже приведен мой файл spec.js
describe('Testing', function(){
it('perform login', function() {}
browser.get(browser.baseUrl);
browser.manage().window().maximize();
console.log("Admin :: " + browser.params.AdminUsername + " " + browser.params.AdminPassword);
element(by.model('user.userName')).sendKeys(browser.params.AdminUsername);
element(by.model('user.password')).sendKeys(browser.params.AdminPassword);
browser.sleep('2000');
element(by.buttonText('Login')).click();
element(by.model("newCommunity.title")).sendKeys(browser.params.CreateTitle);
element(by.model("newCommunity.key")).sendKeys(browser.params.CreateKey);
let buttons = element.all(by.css("button.ng-binding"));
let tds = element.all(by.css("td.ng-binding"));
console.log("Buttons :: " + buttons);
console.log("tds :: " + tds);
// var buttons = driver.findElements(By.css("button.ng-binding"));
// var tds = driver.findElements(By.css("td.ng-binding"));
for (var i = 0; i < tds.length; i++) {
console.log("get text for index " + i + " Value :: " + tds[i].getText());
if (tds[i].getText() == 'protractor-testing') {
console.log("Got the actual community at : " + i);
console.log("Clicking button :: " + buttons[i]);
buttons[i].click();
break;
}
}
});
})
Обратите внимание, что я не хочу использовать xPath.