【发布时间】:2015-01-30 04:22:39
【问题描述】:
目标:我想在 it 块上创建一个循环,以测试元素文本是否匹配。
错误: Error: No element found using locator: by.cssContainingText(".submenu li a", "undefined")
问题:如何编写一个 for 循环来测试多个列表项?此外,我如何使var title 对内部it block 可见
对于这个例子:我有 2 个测试,我想通过循环进行干燥 下一个测试示例只是伪代码无法在下面进行工作测试。
var config = require('../../protractor.conf.js').config;
describe('this Homepage Body Tests', function(){
browser.driver.get(config.homepageUrl);
describe('sub navigation functionality', function () {
//creates teh array of strings for this sample
var title = ['find a store', 'clinic'];
for(var i = 0; i < title.length; i++){
it("should open find a" + title[i] + "page", function(){
browser.driver.sleep(2000);
browser.ignoreSynchronization = true;
var link = element(by.cssContainingText('.submenu li a', title[i]));
expect(link.getText()).toEqual(title[i]);
});
};
});
});
HTML:
<div class="submenu">
<ul>
<li><a >find a store</a>
</li>
<li><a>clinic</a>
</li>
</ul>
</div>
工作测试示例:
it("should open find a store page", function(){
browser.driver.sleep(2000);
browser.ignoreSynchronization = true;
var title = 'find a store';
var link = element(by.cssContainingText('.submenu li a', title));
expect(link.getText()).toEqual(title);
});
it("should open find a clinic page", function(){
browser.driver.sleep(2000);
browser.ignoreSynchronization = true;
var title = 'clinic';
var link = element(by.cssContainingText('.submenu li a', title));
expect(link.getText()).toEqual(title);
});
更新:
it("should open find a store page", function(){
browser.driver.sleep(2000);
browser.ignoreSynchronization = true;
var string = 'find a store';
var main = '.main';
var link = element(by.cssContainingText('.submenu li a', string));
expect(link.getText()).toEqual(string);
//I WANT OT CLICK ON THAT TOO!
link.click().then(function() {
browser.driver.sleep(3000);
var title = element(by.cssContainingText(main, string));
expect(title.getText()).toBe(string);
});
});
【问题讨论】:
标签: javascript angularjs selenium-webdriver protractor angularjs-e2e