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

Protractor test passes but cant see search field populate

本文关键字:搜索 字段 填充 测试 量角器      更新时间:2023-09-26

我的测试用例工作,但问题是我看不到我的任何键发送到我的搜索输入框类型的量角器当我的脚本运行。


1个规格,0个故障

以7.696秒完赛

[14:53:55]我/launcher - 0个WebDriver实例仍在运行

[14:53:55] I/launcher - chrome #01 passed

homho3031261: Homeshp jonathan.hofler $


如有任何帮助,不胜感激。

(HTML代码)

<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
  });
});

根据这个问题的标题,我假设您在问为什么即使搜索字段不存在/您无法看到测试发送键,测试也会通过。

你的测试通过了,因为你唯一的断言是基于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');

就你的定位器而言,它看起来不正确,这可能就是它不发送密钥的原因。首先,由于您使用了.all,因此创建了ElementArrayFinder。其次,你不应该在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,我建议您开始使用预期条件。比如:

var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(search)).then(function() {
   search.sendKeys('Chesapeake VA');
});
expect(search.getAttribute('value')).toEqual('Chesapeake VA');

search是类型ElementArrayFinder,它没有sendKeys方法。您希望使用.then等待承诺返回一个elementfinder数组,然后在那里使用sendKeys。检查文档:

ElementArrayFinder

sendKeys