Helpex - Trao đổi & giúp đỡ Đăng nhập
20

Tôi có hai bài kiểm tra:

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

thử nghiệm đầu tiên, hộp tìm kiếm, hoạt động tốt. kiểm tra thứ hai, trạng thái, không vượt qua vì giá trị cuối cùng được nhập trong queryInput được chuyển sang kiểm tra thứ hai và queryInput.clear () không hoạt động. Tuy nhiên, trong thử nghiệm thứ hai, nếu tôi thực hiện một cuộc gọi queryInput.sendKeys ("something"), "something" sẽ hiển thị. Nếu tôi lấy ra clear () trong lần kiểm tra thứ hai, tôi sẽ thấy "motorolasomething". Vì vậy, trong khi có vẻ như clear () đang hoạt động, bài kiểm tra của tôi sẽ không vượt qua nếu tôi chỉ có clear () trong bài kiểm tra thứ hai, khi tôi chạy bài kiểm tra thứ hai, tôi sẽ thấy "motorola", ngay cả khi clear () được gọi trước thử nghiệm thứ hai.

Tôi tự hỏi tại sao clear () không được xóa trong lần kiểm tra thứ hai khi tôi không có sendKeys () sau nó.

20 hữu ích 1 bình luận 42k xem chia sẻ
41

Tài liệu của clear () cho biết như sau:

[! webdriver.promise.Promise] clear ()

Lập lịch lệnh để xóa {@code value} của phần tử này. Lệnh này không có hiệu lực nếu phần tử DOM bên dưới không phải là phần tử INPUT văn bản hay phần tử TEXTAREA.

Trả về : Một lời hứa sẽ được giải quyết khi phần tử đã được xóa.

vì vậy để rõ ràng làm những gì bạn muốn, bạn phải làm việc với lời hứa rằng nó sẽ trở lại! để làm như vậy bạn phải sử dụngthen()

Đây là cách nó làm việc:

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

do đó clear()trả về cho bạn một lời hứa xóa đầu vào và then()cho lời hứa đó phải làm gì ngay sau khi đầu vào được xóa.

41 hữu ích 2 bình luận chia sẻ
6
await element.sendKeys(Key.chord(Key.CONTROL, 'a'));

await element.sendKeys(Key.DELETE);
6 hữu ích 2 bình luận chia sẻ
4

Clear().then(..) không hiệu quả với tôi.

Vì vậy, đây là công việc của tôi xung quanh:

queryInput.sendKeys(protrator.Key.chord(protrator.Key.CONTROL, 'a'));
queryInput.sendKeys('nexus')
4 hữu ích 0 bình luận chia sẻ
1

Bạn có thể kết hợp các kỳ hạn thành một chuỗi:

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

1 hữu ích 1 bình luận chia sẻ
0

Sử dụng mẫu PageObject và async / await, tôi có mã như vậy hoạt động:

async clearForm() {
    await this.nameInput.clear();
    await this.descriptionInput.clear();
}
0 hữu ích 0 bình luận chia sẻ
0

Điều này đã làm việc cho tôi:

         click(`${fieldId}`).then(() => {
                        yourElement.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "a")).then(() => {
                            yourElement.sendKeys(protractor.Key.BACK_SPACE);
                            yourElement.clear();
}
0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript protractor , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading