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)

Program uruchomiony po javascript iniekcji (Popup zniknie)

Jakie wyskakujące okienka? Pola wiadomości, takie jak alerty i potwierdzenia? lub nowe okna otwarte za pomocą 'window.open'? –
Nowe okna w rzeczywistości – Kira
Mam to działa przez wstrzyknięcie niektórych javascript na stronę załadowaną Watin. Proszę spojrzeć na moją odpowiedź. –