2014-11-17 23 views
6

Tôi đang cố chạy thử nghiệm thước đo góc trong môi trường Amazon EC2 bằng trình duyệt PhantomJS. Tôi biết nó không phải là lời khuyên cho người dùng PhantomJS với Protractor nhưng nó là sự lựa chọn duy nhất tôi có ngay bây giờ. Các bài kiểm tra luôn làm việc trong môi trường Win7.Tại sao nhiều yêu cầu GET thất bại trong kiểm tra thước đo góc?

Khi thử nghiệm trông như thế này nó luôn luôn hoạt động tốt

describe('Portal Login End 2 End test', function() { 
    it('should automatically redirect to login /form', function() { 
     browser.get(''); 
     expect(browser.getLocationAbsUrl()).toMatch("/login"); 
    }); 

    it('should automatically redirect to dashboard page after successful login', function() { 
     element(by.model('user.username')).sendKeys('admin'); 
     element(by.model('user.password')).sendKeys('admin'); 
     element(by.buttonText('Sign in')).click(); 
     expect(browser.getLocationAbsUrl()).toMatch("dashboard/home"); 
    }); 
}); 

nhưng khi một yêu cầu GET được thực hiện trong các chức năng beforeEach như thế này

describe('Portal Login End 2 End test', function() { 
    beforeEach(function() { 
     browser.get(''); 
    } 
    it('should automatically redirect to login', function() { 
     expect(browser.getLocationAbsUrl()).toMatch("/login"); 
    }); 

    it('should automatically redirect to dashboard page after successful login', function() { 
     element(by.model('user.username')).sendKeys('admin'); 
     element(by.model('user.password')).sendKeys('admin'); 
     element(by.buttonText('Sign in')).click(); 
     expect(browser.getLocationAbsUrl()).toMatch("dashboard/home"); 
    }); 
}); 

các cuộc thử nghiệm thất bại phần lớn thời gian, nhưng không phải luôn luôn, với lỗi sau đây

UnknownError: Error communicating with the remote browser. It may have died. Build info: version: '2.43.1', revision: '5163bce', time: '2014-09-10 16:27:33' System info: host: 'ip-10-249-98-182', ip: '10.249.98.182', os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.32-504.el6.x86_64', java.version: '1.6.0_45' Driver info: driver.version: EventFiringWebDriver

Vì vậy, khi t wo Yêu cầu GET được thực hiện trong cùng một thử nghiệm mà nó thường xuyên nhất không thành công, nhưng khi chỉ có một yêu cầu được thực hiện thì nó luôn hoạt động. Và như tôi đã viết ở trên, hai yêu cầu GET hoạt động tốt trong môi trường Win7 nhưng không hoạt động trong Linux.

Tôi đã xem một số bài đăng có lỗi này nhưng không thấy cách khắc phục. Bất cứ ai ra khỏi đó với giải pháp?

+0

lỗi tương tự ở đây .. Và gặp khó khăn khi sửa chữa .. –

Trả lời

0

Tôi không chắc chắn nếu beforeEach chờ công việc trong trình duyệt kết thúc, nhưng chức năng it sẽ đợi. Hãy thử gói các cuộc gọi get trong một chức năng it.

describe('Portal Login End 2 End test', function() { 
    beforeEach(function() { 
      it('redirects',function(){browser.get('');}); 
    }); 
    // ..... 
}); 
+1

Cảm ơn bạn đã trả lời. Đã thử nó nhưng nó có vẻ như beforeEach không chấp nhận nó vì nó asynchrounous và nó() là không. Tôi nhận được các hành vi ngẫu nhiên cũng khi sử dụng không có beforeEach nhưng một yêu cầu GET đầu tiên trong mỗi bài kiểm tra. – Ola

0

Nếu bạn gặp khó khăn, như bạn đã nói, là do trình duyệt không chờ đợi được đăng nhập beforeEach, hãy thêm trình duyệt.waitForAngular();

describe('Portal Login End 2 End test', function() { 
beforeEach(function() { 
    browser.get(''); 
} 
it('should automatically redirect to login', function() { 
    browser.waitForAngular(); 
    expect(browser.getLocationAbsUrl()).toMatch("/login"); 
}); 

it('should automatically redirect to dashboard page after successful login', function() { 
    element(by.model('user.username')).sendKeys('admin'); 
    element(by.model('user.password')).sendKeys('admin'); 
    element(by.buttonText('Sign in')).click(); 
    expect(browser.getLocationAbsUrl()).toMatch("dashboard/home"); 
}); 
}); 

vì thử nghiệm chạy theo thứ tự, bạn không cần phải gọi nó theo từng khối.

bạn cũng có thể thử gọi trình duyệt.waitForAngular() trong hàm beforeEach, mặc dù tôi thích thực hiện cuộc gọi trong chức năng đó.

Các vấn đề liên quan