2010-08-11 15 views
9

Xin chàoC# WatiN - Thêm một AlertDialogHandler bấm nút ok trên tất cả các cửa sổ hộp thoại Alert

Những người đã sử dụng WatiN khả năng cũng sử dụng DialogHandlers.

Vâng ai đó có thể dạy tôi làm thế nào tôi có thể gán một DialogHandler mà sẽ xử lý bất kỳ Alert Box window.alert(), trong một trường hợp IE cụ thể dưới sự kiểm soát WatiN.

DialogHandler chỉ phải bấm vào nút OK cho hộp thoại rất cảnh báo, trong trường hợp đó tôi nghĩ rằng chúng ta cần một AlertDialogHandler mà về cơ bản chỉ phải bấm vào nút OK.

AlertDialogHandler.OKButton.Click() 

Tôi đã tìm kiếm trên web và tìm thấy một vài ví dụ. Nhưng chúng hoạt động trong một khoảng thời gian ngắn hoặc thời gian bạn chỉ định, tôi cần một thời gian sẽ hoạt động mãi mãi cho đến khi tôi chọn dừng bấm vào một nút.

Điều này càng làm tôi mất đầu trong nhiều giờ, mọi trợ giúp đều được đánh giá cao. Cảm ơn.

Lưu ý: Đôi khi cửa sổ hộp thoại cảnh báo có hai nút. Đó là lý do tại sao tôi thực sự cần phải bấm vào nút OK, không chỉ Đóng cửa sổ hộp thoại.

Trả lời

16

Tạo lớp:

public class OKDialogHandler : BaseDialogHandler 
{ 
    public override bool HandleDialog(Window window) 
    { 
     var button = GetOKButton(window); 
     if (button != null) 
     { 
      button.Click(); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public override bool CanHandleDialog(Window window) 
    { 
     return GetOKButton(window) != null; 
    } 

    private WinButton GetOKButton(Window window) 
    { 
     var windowButton = new WindowsEnumerator().GetChildWindows(window.Hwnd, w => w.ClassName == "Button" && new WinButton(w.Hwnd).Title == "OK").FirstOrDefault(); 
     if (windowButton == null) 
      return null; 
     else 
      return new WinButton(windowButton.Hwnd); 
    } 
} 

Sau khi tạo thể hiện của IE, đính kèm handler thoại với nó:

ie.AddDialogHandler(new OKDialogHandler()); 

handler thoại này sẽ xử lý tất cả các cửa sổ, có chứa một nút với "OK" caption bằng cách nhấp vào nút đó.

+0

Sạch sẽ và đơn giản. Nó hoạt động như đồng hồ. Cảm ơn. –

+0

@prostynick -may Tôi biết WindowsEnumerator lớp nào thuộc về nó? Nó dường như là mấu chốt của lớp học của bạn OKDialogHandler.- Doh! Tôi tìm thấy nó trong BaseDialogHandler. Cảm ơn! – voidmain

+0

Không, tôi đã sai. Tôi không tìm thấy WindowsEnumerator trong BaseDialogHandler, mà là trong WatiN.Core.Native.InternetExplorer. – voidmain

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