我的测试用例有效,但问题是当我的脚本运行时,我无法看到我的搜索输入框中的任何键被量角器输入。
1个规格,0个失败
以7.696秒完成
[14:53:55] I / launcher - WebDriver的0个实例仍在运行
[14:53:55] I / launcher - chrome#01传递
homho3031261:Homeshp jonathan.hofler $
任何帮助都将不胜感激。
--- HTML CODE ---
<input parse-search-query=""
type="text"
tabindex="1"
name="search_query"
autocomplete="off"
placeholder="Search by City ST, Zip, or Address"
data-ng-model="searchQueryFieldCtrl.searchFormController.searchParams.search_query"
data-ng-change="searchQueryFieldCtrl.searchFormController.clearErrors()"
data-focus-on="focusQuery || form.search_query.$error"
data-uib-typeahead="suggestion as suggestion.label for suggestion in searchQueryFieldCtrl.getSuggestions($viewValue)"
data-typeahead-focus-first="false"
data-typeahead-min-length="0"
data-typeahead-wait-ms="300"
data-typeahead-on-select="searchQueryFieldCtrl.setSearch($item)"
class="ng-pristine ng-untouched ng-valid ng-scope"
aria-autocomplete="list"
aria-expanded="false"
aria-owns="typeahead-69-869">
--- --- conf.js
describe('New stack hompage test', function() {
it('should test home page title and search', function() {
browser.ignoreSynchronization = true;
browser.get('http://localhost:3000/');
browser.sleep(3000)
expect(browser.getCurrentUrl()).toEqual('http://localhost:3000/');
expect(browser.getTitle()).toEqual('Find Homes for Sale, Rent & Real Estate Listings Nationwide at Homes.com');
var search = element.all(by.css("input[name='.search_header.search_query']"));
search.sendKeys('Chesapeake VA'); // this is not working
browser.sleep(3000);
// search.sendKeys(protractor.Key.ENTER).preform(); // this is not working
// var searchT = element.all(by.css("input[name='.homepage_hero search_query']"));
// search.sendKeys('anything'); // this is not working
});
});
答案 0 :(得分:1)
根据这个问题的标题,我假设您已经问过为什么测试正在通过,即使搜索字段不存在/您也看不到测试发送密钥。
您的测试通过,因为您的唯一断言基于Url和标题:
expect(browser.getCurrentUrl()).toEqual('http://localhost:3000/');
expect(browser.getTitle()).toEqual('Find Homes for Sale, Rent & Real Estate Listings Nationwide at Homes.com');
您还需要对搜索输入进行测试。要检查输入的文字,请不要使用getText()
,而应使用getAttribute('value')
。所以你可以这样做:
expect(search.getAttribute('value')).toEqual('Chesapeake VA');
就您的定位器而言,它看起来不正确,这可能是它不发送密钥的原因。首先,您使用ElementArrayFinder
后创建.all
。其次,你不应该在search_header
之前有一段时间,因为这表明你正在寻找一个班级。
试试这个:
var search = $('input[name="search_query"]');
$
只是element(by.css())
的简写。如果您使用.all
因为有多个元素,那么要么将.first()
添加到该定位器的末尾,要么使用.get(1)
(或者索引不同):
var search = $$('input[name="search_query"]').get(2);
$$
是element.all(by.css())
最后,由于您正在使用browser.ignoreSynchronization = true
,我建议您开始使用Expected Conditions。类似的东西:
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(search)).then(function() {
search.sendKeys('Chesapeake VA');
});
expect(search.getAttribute('value')).toEqual('Chesapeake VA');
答案 1 :(得分:0)
search
是ElementArrayFinder类型,它没有sendKeys
方法。您希望使用.then
等待promise返回ElementFinders数组,然后在那里使用sendKeys。查看文档: