Транспортировка clear() не работает

У меня есть два теста:

  it('should filter the phone list as user types into the search box', function() {

    var results = ptor.findElements(protractor.By.repeater('phone in phones').column('phone.name'));
    results.then(function(arr) {
            expect(arr.length).toEqual(3);
    });

    var queryInput = ptor.findElement(protractor.By.input('query'));

    queryInput.sendKeys('nexus');

    results = ptor.findElements(protractor.By.repeater('phone in phones').column('phone.name'));
    results.then(function(arr) {
        expect(arr.length).toEqual(1);
    });

    queryInput.clear();
    queryInput.sendKeys('motorola');

    results = ptor.findElements(protractor.By.repeater('phone in phones').column('phone.name'));
    results.then(function(arr) {
        expect(arr.length).toEqual(2);
    });

});

it('should display the current filter value within an element with id "status"',
    function() {
        //expect(element('#status').text()).toMatch(/Current filter: \s*$/);
        var queryInput = ptor.findElement(protractor.By.input('query'));
        queryInput.clear();

        expect(ptor.findElement(protractor.By.id('status')).getText()).toMatch('Current Filter:');

        //input('query').enter('nexus');

        //queryInput.clear();
        //queryInput.sendKeys('nexus');

        //expect(element('#status').text()).toMatch(/Current filter: nexus\s*$/);
        //expect(ptor.findElement(protractor.By.id('status')).getText()).toMatch('^\Current Filter:.');

        //alternative version of the last assertion that tests just the value of the binding
        //using('#status').expect(binding('query')).toBe('nexus');
    });

первый тест, поле поиска, отлично работает. второй тест, статус, не проходит, потому что последнее значение, введенное в queryInput, переносится во второй тест, а queryInput.clear() не работает. Однако во втором тесте, если я сделаю запрос queryInput.sendKeys( "что-то" ), отобразится "что-то". Если я выберу clear() во втором тесте, я увижу "motorolasomething". Итак, хотя кажется, что clear() работает, мой тест не проходит, если у меня есть только clear() во втором тесте, когда я запускаю второй тест, я увижу "motorola", даже когда вызывается clear() до второго испытания.

Мне интересно, почему clear() не очищается во втором тесте, когда у меня нет sendKeys() после него.

Ответы

Ответ 1

Документация clear() говорит следующее:

[! webdriver.promise.Promise] clear()

Задает команду очистить значение {@code} этого элемента. Эта команда не действует, если базовый элемент DOM не является ни текстовым элементом INPUT, ни TEXTAREA элемент.

Возвращает: обещание, которое будет разрешено, когда элемент были очищены.

поэтому, чтобы понять, что вы хотите, вам нужно работать с обещанием, что оно вернется! для этого вам нужно использовать then()

вот как это работает:

queryInput.clear().then(function() {
    queryInput.sendKeys('motorola');
})

поэтому clear() возвращает вам обещание очистить ввод, а then() сообщает обещание, что делать, как только будет сброшен вход.

Ответ 2

await element.sendKeys(Key.chord(Key.CONTROL, 'a'));

await element.sendKeys(Key.DELETE);

Ответ 3

Clear().then(..) не работает для меня.

Так что это моя работа вокруг:

queryInput.sendKeys(protrator.Key.chord(protrator.Key.CONTROL, 'a'));
queryInput.sendKeys('nexus')

Ответ 4

Вы можете комбинировать обещания в цепочку:

queryInput.clear().sendKeys('nexus');