2013-07-05 14 views
12

Scenariusz: - Mam stronę z edytorem tekstu iFrame oraz przycisk na stronie. - Przełączałem z ramki nadrzędnej do ramki iFrame, aby odczytać treść z edytora tekstu. - Po przeczytaniu treści edytora tekstu, chcę kliknąć przycisk w ramce nadrzędnej strony. - W tym celu próbowałem wrócić do ramki nadrzędnej z ramki iFrame, używając następującej instrukcji: webDriver.SwitchTo(). DefaultContent(); - Ale nadal nie mogę znaleźć elementu przycisku, który znajduje się w ramce nadrzędnej.Przejście do ramki nadrzędnej z iFrame i znalezienie elementu w ramce nadrzędnej za pomocą Selenium Webdriver. C#

Doceniam twoją pomoc! Dzięki

+0

możemy zobaczyć w formacie HTML IFrames – Arran

Odpowiedz

13

To dla twoich odpowiedzi facetów. Jest rozwiązany!

Rozwiązanie:

  • Chociaż używam webDriver.SwitchTo().DefaultContent(); przełącza go na webDriver do górnej większości oknie strony. [Wcześniej szukałem elementu przycisku w tym oknie i dlatego nie mogłem go znaleźć, ponieważ przycisk znajdował się w głównej ramce strony]

  • Po przejściu do głównego okna ponownie przełączałem webDriver do głównej ramki strony. Ta główna rama miała element przycisku. W ten sposób udało mi się znaleźć element przycisku. I to zmieniło sprawę!

Więc ostateczny kod nie posiada webDriver.SwitchTo().DefaultContent(); lecz ma następujący w jego miejsce:

_webDriver.SwitchTo().Window(windowHandle); 
    _webDriver.SwitchTo().Frame("mainFrame"); 

Uwaga: windowhandle w powyższym kodzie jest uchwytem górnym większości oknie strony. Myślę, że jego wartość może się zmieniać w zależności od przeglądarek, ale nie jestem pewien.

6

Miałem problemy z podobnym problemem i okazało się, że mogę przełączyć z powrotem przez Window Handle:

string currentWindow = Driver.CurrentWindowHandle; 
// switch to frame and do stuff.. 
Driver.SwitchTo().Window(currentWindow); // switch back 
2

W moim przypadku następujący kod pracował dobrze:

driver.switchTo().parentFrame(); 
Powiązane problemy