2010-03-18 37 views
5

Trong chủ đề WatiN in Visual Studio 2008 - second test method fails có một giải pháp tốt với IEStaticInstanceHelper (bản gốc câu trả lời Reusing an IE instance in VS test, sources), nhưng khi ClassCleanup bắn nó không trên AttachToIE. Kết quả là IEXPLORAR vẫn chạy.WatiN trong MSTest - ClassCleanup thất bại

Sự cố là gì?

Tất nhiên nó có thể chỉ giết chết quá trình như thế này:

// Id of IEXPLORAR 
_ie.ProcessID 

Process.GetProcessById(_processId).Kill(); 
this._ie = null; 

Nhưng tôi không thực sự thích theo cách này ...

Bất kỳ ý tưởng?

+0

Tôi chạy vào cùng một vấn đề, trên Win 7. Cảm ơn cho câu hỏi. Tôi đồng ý giết chết quá trình này là không sạch sẽ, nhưng cũng làm điều đó cho bây giờ. –

+0

Cảm ơn vì điều này, chính câu hỏi đã cung cấp câu trả lời cho tôi! –

Trả lời

2

Nó không thành công vì MSTest thực hiện dọn dẹp trong một căn hộ đa luồng, thậm chí nó chạy thử nghiệm riêng lẻ trong STA. Cách WaitN gắn với IE liên quan đến việc tìm kiếm các đối tượng COM không phải là luồng an toàn và không được tiếp xúc với MTA.

Cảm ơn workaround quá trình giết, sử dụng điều đó quá bây giờ, mặc dù tôi đang sử dụng CloseMainWindow() hơn Kill()

0

Bạn có thể sử dụng ký tự đại diện với phương thức AttachTo của WatiN để lấy phiên bản trình duyệt hiện có. Điều này sẽ cho phép bạn sử dụng lại ví dụ trình duyệt trong các thử nghiệm tiếp theo hoặc đóng trình duyệt xuống nếu đó là tất cả các bạn đang quan tâm Ví dụ:.

// find first browser matching our wildcard 
IE found = Browser.AttachTo<IE>(Find.ByTitle(new Regex(".*"))); 

// then close just that one 
found.Close(); 

// or close all running IE instances at once 
// found.ForceClose(); 

Bạn có thể xác định nếu có một ví dụ IE để đính kèm vào sử dụng Phương thức Exists với cùng một Find Constraint. Ví dụ:

Constraint browserWildcard = Find.ByTitle(new new Regex(".*")); 
if(IE.Exists<IE>(browserWildcard)) 
{ 
    // ... 
} 
Các vấn đề liên quan