selenium-webdriver
Przełączanie ramek
Szukaj…
Składnia
- Jawa
- driver.switchTo (). frame (nazwa ciągu);
- driver.switchTo (). frame (String id);
- driver.switchTo (). frame (int index);
- driver.switchTo (). frame (WebElement frameElement);
- driver.switchTo (). defaultContent ();
- DO#
- driver.SwitchTo (). Frame (int frameIndex);
- driver.SwitchTo (). Frame (IWebElement frameElement);
- driver.SwitchTo (). Frame (ciąg frameName);
- driver.SwitchTo (). DefaultContent ();
- Pyton
- driver.switch_to_frame (nameOrId)
- driver.switch_to.frame (nameOrId)
- driver.switch_to_frame (indeks)
- driver.switch_to.frame (indeks)
- driver.switch_to_frame (frameElement)
- driver.switch_to.frame (frameElement)
- driver.switch_to_default_content ()
- driver.switch_to.default_content ()
- JavaScript
- driver.switchTo (). frame (nameOrId)
- driver.switchTo (). frame (index)
- driver.switchTo (). defaultContent ()
Parametry
parametr | Detale |
---|---|
nameOrId | Wybierz ramkę według nazwy id. |
indeks | Wybierz ramkę według indeksu zerowego. |
frameElement | Wybierz ramkę, używając wcześniej umieszczonego elementu WebElement |
Aby przełączyć na ramkę za pomocą Java
Na przykład, jeśli kod źródłowy HTML widoku lub elementu HTML jest zawinięty przez taki element iframe:
<iframe src="../images/eightball.gif" name="imgboxName" id="imgboxId">
<p>iframes example</p>
<a href="../images/redball.gif" target="imgbox">Red Ball</a>
</iframe><br />
... a następnie, aby wykonać dowolną akcję na elementach WWW ramki iframe, musisz najpierw przełączyć fokus na ramkę iframe, używając jednej z poniższych metod:
Korzystanie z identyfikatora ramki (powinno być używane tylko, jeśli znasz identyfikator iframe).
driver.switchTo().frame("imgboxId"); //imgboxId - Id of the frame
Używanie nazwy ramki (powinno być używane tylko, jeśli znasz nazwę ramki iframe).
driver.switchTo().frame("imgboxName"); //imgboxName - Name of the frame
Korzystanie z indeksu ramek (powinno być używane tylko wtedy, gdy nie masz identyfikatora lub nazwy iframe), gdzie indeks określa pozycję iframe między wszystkimi ramkami.
driver.switchTo().frame(0); //0 - Index of the frame
Uwaga: jeśli na stronie znajdują się trzy ramki, pierwsza ramka będzie miała indeks 0, druga indeks 1, a trzecia indeks 2.
Korzystanie z poprzednio zlokalizowanego elementu webelement (należy go używać tylko wtedy, gdy ramka została już zlokalizowana i zwrócona jako element WebElement
).
driver.switchTo().frame(frameElement); //frameElement - webelement that is the frame
Aby kliknąć kotwicę Red Ball
:
driver.switchTo().frame("imgboxId");
driver.findElement(By.linkText("Red Ball")).Click();
Aby wyjść z ramki za pomocą Java
Aby przełączyć fokus na główny dokument lub pierwszą ramkę strony. Musisz użyć poniższej składni.
driver.switchTo().defaultContent();
Przełącz na ramkę za pomocą C #
1. Przełącz na ramkę według indeksu.
Przechodzimy do indeksu 1. Indeks odnosi się do kolejności ramek na stronie. Powinno to być stosowane w ostateczności, ponieważ identyfikator ramki lub nazwy są znacznie bardziej niezawodne.
driver.SwitchTo().Frame(1);
2. Przełącz na ramkę według nazwy
driver.SwitchTo().Frame("Name_Of_Frame");
3. Przełącz się do ramki według tytułu, identyfikatora lub innych, przekazując IWebElement
Jeśli chcesz przejść do ramki według identyfikatora lub tytułu, musisz podać element web jako parametr:
driver.SwitchTo().Frame(driver.FindElement(By.Id("ID_OF_FRAME")));
driver.SwitchTo().Frame(driver.FindElement(By.CssSelector("iframe[title='Title_of_Frame']")));
Pamiętaj też, że jeśli twoja ramka pojawia się kilka sekund, być może będziesz musiał skorzystać z oczekiwania :
new WebDriverWait(driver, TimeSpan.FromSeconds(10))
.Until(ExpectedConditions.ElementIsVisible(By.Id("Id_Of_Frame")));
Wyjdź z ramy:
driver.SwitchTo().DefaultContent()
Aby wyjść z ramki za pomocą C #
Aby przełączyć fokus na główny dokument lub pierwszą ramkę strony. Musisz użyć poniższej składni.
webDriver.SwitchTo (). DefaultContent ();
Przełączaj między ramkami podrzędnymi ramki nadrzędnej.
Rozważ, że masz ramkę nadrzędną (Frame-Parent). i 2 ramki potomne (Frame_Son, Frame_Daughter). Pozwala zobaczyć różne warunki i sposób obsługi.
1. od rodzica do syna lub córki:
driver.switchTo().frame("Frame_Son");
driver.switchTo().frame("Frame_Daughter");
2. Od syna do rodzica: Jeśli rodzic jest domyślną ramką, przełącz na domyślną ramkę, w przeciwnym razie przełącz z domyślnej ramki na ramkę nadrzędną. Ale nie możesz przejść bezpośrednio z syna na rodzica.
driver.switchTo().defaultContent();
driver.switchTo().frame("Frame_Parent");
3. Od syna do córki: Jeśli twoja siostra popełni jakiś błąd, nie krzycz na nią, po prostu skontaktuj się z rodzicem. Podobnie, dajesz kontrolę ramce nadrzędnej, a następnie ramce pochodnej.
driver.switchTo().defaultContent();
driver.switchTo().frame("Frame_Parent");
driver.switchTo().frame("Frame_Daughter");
Poczekaj na załadowanie ramek
W wielu przypadkach twoja ramka może nie pojawić się natychmiast i prawdopodobnie musisz poczekać, aż zostanie załadowana, aby się przełączyć. W przeciwnym razie będziesz mieć NoSuchFrameException.
Dlatego zawsze dobrym wyborem jest czekać przed zmianą. Poniżej przedstawiono idealny sposób oczekiwania na załadowanie ramki.
try{
new WebDriverWait(driver, 300).ignoring(StaleElementReferenceException.class).
ignoring(WebDriverException.class).
until(ExpectedConditions.visibilityOf((driver.findElement(By.id("cpmInteractionDivFrame"))));}
catch{
// zgłasza wyjątek tylko wtedy, gdy ramka nie jest widoczna w czasie oczekiwania 300 sekund}