量角器测试通过,但无法看到搜索字段填充

时间:2016-08-31 19:39:34

标签: javascript angularjs protractor

我的测试用例有效,但问题是当我的脚本运行时,我无法看到我的搜索输入框中的任何键被量角器输入。

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

  });
});

2 个答案:

答案 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。查看文档:

ElementArrayFinder

sendKeys