2016-09-05 53 views
5

Używam biblioteki Watin w aplikacji formularzy systemu Windows. Aby ukryć przeglądarkę używam tej instrukcji:Ukrywanie wyskakujących okienek przeglądarki - Watin

Settings.Instance.MakeNewIeInstanceVisible = false; 

Jednak nie ukrywa wyskakujące okienka (po symulację kliknij na element, który otwiera okienko). Czy istnieje sposób, aby je ukryć?

+0

Jakie wyskakujące okienka? Pola wiadomości, takie jak alerty i potwierdzenia? lub nowe okna otwarte za pomocą 'window.open'? –

+0

Nowe okna w rzeczywistości – Kira

+0

Mam to działa przez wstrzyknięcie niektórych javascript na stronę załadowaną Watin. Proszę spojrzeć na moją odpowiedź. –

Odpowiedz

0

Sprawdziłem released notes i stwierdziliśmy:

Poprzez próby Watin domyślnych sprawiają, że tworzone instancje Internet Explorer widoczne dla użytkownika. Możesz uruchomić test niewidoczny, zmieniając następujące ustawienie następujące po . Należy pamiętać, że okna dialogowe HTMLDialog i dowolne wyskakujące okna będą wyświetlane nawet po ustawieniu tego ustawienia na wartość false (jest to domyślne zachowanie programu Internet Explorer w wersji , którego obecnie nie można wyłączyć).

IE.Settings.MakeNewIeInstanceVisible = false; // default is true 

Od WatIN nie zostały zaktualizowane od 2011 roku, myślę, że nie można spodziewać żadnego nowego obsługę funkcji, co chcesz.

Nie wiem, czy to może być obejście problemu, ale jeśli te wyskakujące okienka nie są important dla Ciebie, po prostu nie blokuj wszystkich wyskakujących okienek?

How to turn off popup blocker through code in Watin?

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBOC_POPUPMANAGEMENT 
Value = 0 for Off 
Value = 1 for On 
+0

Są one rzeczywiście ważne:/ – Kira

+0

@HediNaily Dobrze, to, czego chcesz, nie jest przez nich zapewniane. Myślę, że może musisz zmienić swoją bibliotekę. –

0

Można to zrobić programowo przez uruchomienie kodu javascript i zrobić window.open funkcję nic nie robić!

Przykład

Here jest strona testowa zrobiłem, że ma bardzo prostą formę, a gdy użytkownik kliknie przycisk Sum, to podsumowuje numA + numB i wyświetla wynik wewnątrz elementu <span id="result"></span> . Po aktualizacji tekstu wynikowego otwiera okno wyskakujące, wywołując window.open. W celu uczynienia tego okienko znika, musimy wyeliminować window.open funkcję:

window['open'] = function() { return false; } 

to zrobić przy użyciu Watin, musimy użyć funkcji Eval i wstrzyknąć kod JavaScript takiego:

browser.Eval("window['open'] = function() { return false; }"); 

Następnie wszystkie wyskakujące okienka są niedostępne tylko dla tej strony i mamy oczekiwany wynik.

Przykładowy kod C#

private void buttonPopupdEnabled_Click(object sender, EventArgs e) 
{ 

    WatiN.Core.Settings.Instance.MakeNewIeInstanceVisible = false; 
    IE ie = new IE(); 

    ie.GoTo("http://zikro.gr/dbg/html/watin-disable-popups/"); 
    ie.Eval("window['open'] = function() { return false; }"); 
    ie.TextField(Find.ById("numA")).TypeText("15"); 
    ie.TextField(Find.ById("numB")).TypeText("21"); 
    ie.Button(Find.ById("sum")).Click(); 
    string result = ie.Span(Find.ById("result")).Text; 
    ie.Close(); 

    labelResult.Text = String.Format("The result is {0}", result); 
} 

uruchomiony program przed javascript iniekcji (Popup zjawia)

Popup without javascript injection

Program uruchomiony po javascript iniekcji (Popup zniknie)

enter image description here