selenium-webdriver
Cambio di frame
Ricerca…
Sintassi
- Giava
- driver.switchTo (). frame (nome stringa);
- driver.switchTo (). frame (String id);
- driver.switchTo (). frame (int index);
- driver.switchTo (). frame (WebElement frameElement);
- . Driver.switchTo () defaultContent ();
- C #
- driver.SwitchTo (). Frame (int frameIndex);
- driver.SwitchTo (). Frame (IWebElement frameElement);
- driver.SwitchTo (). Frame (string frameName);
- . Driver.SwitchTo () DefaultContent ();
- Pitone
- driver.switch_to_frame (nameOrId)
- driver.switch_to.frame (nameOrId)
- driver.switch_to_frame (indice)
- driver.switch_to.frame (indice)
- driver.switch_to_frame (frameElement)
- driver.switch_to.frame (frameElement)
- driver.switch_to_default_content ()
- driver.switch_to.default_content ()
- JavaScript
- driver.switchTo (). telaio (nameOrId)
- driver.switchTo (). telaio (index)
- driver.switchTo (). defaultContent ()
Parametri
parametro | dettagli |
---|---|
nameOrId | Seleziona un frame con il suo nome di id. |
indice | Seleziona un frame per il suo indice a base zero. |
frameElement | Seleziona una cornice usando il suo WebElement precedentemente posizionato |
Per passare a una cornice utilizzando Java
Per un'istanza, se il codice sorgente HTML di una vista o di un elemento html è racchiuso da un iframe come questo:
<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 />
... quindi per eseguire qualsiasi azione sugli elementi web dell'iframe, devi prima spostare lo stato attivo sull'iframe, utilizzando uno dei seguenti metodi:
Usando frame ID (dovrebbe essere usato solo se conosci l'id dell'iframe).
driver.switchTo().frame("imgboxId"); //imgboxId - Id of the frame
Usando il nome del frame (dovrebbe essere usato solo se conosci il nome dell'iframe).
driver.switchTo().frame("imgboxName"); //imgboxName - Name of the frame
L'uso di frame index (dovrebbe essere usato solo se non si ha l'id o il nome dell'iframe), dove l'indice definisce la posizione dell'iframe tra tutti i frame.
driver.switchTo().frame(0); //0 - Index of the frame
Nota: se nella pagina sono presenti tre frame, il primo frame sarà all'indice 0, il secondo all'indice 1 e il terzo all'indice 2.
Usando il webelement precedentemente posizionato (dovrebbe essere usato solo se hai già localizzato il frame e lo hai restituito come WebElement
).
driver.switchTo().frame(frameElement); //frameElement - webelement that is the frame
Quindi, per fare clic sull'ancora Red Ball
:
driver.switchTo().frame("imgboxId");
driver.findElement(By.linkText("Red Ball")).Click();
Per uscire da una cornice usando Java
Per spostare lo stato attivo su un documento principale o il primo fotogramma della pagina. Devi usare la sintassi qui sotto.
driver.switchTo().defaultContent();
Passa a una cornice usando C #
1. Passa a una cornice per Indice.
Qui stiamo passando all'indice 1. L'indice si riferisce all'ordine dei frame sulla pagina. Questo dovrebbe essere usato come ultima risorsa, in quanto id frame o nomi sono molto più affidabili.
driver.SwitchTo().Frame(1);
2. Passa a un frame per nome
driver.SwitchTo().Frame("Name_Of_Frame");
3. Passa a una cornice per Titolo, Id o altri passando IWebElement
Se vuoi passare a un frame per ID o titolo devi passare in un elemento web come parametro:
driver.SwitchTo().Frame(driver.FindElement(By.Id("ID_OF_FRAME")));
driver.SwitchTo().Frame(driver.FindElement(By.CssSelector("iframe[title='Title_of_Frame']")));
Tieni inoltre presente che se la cornice impiega alcuni secondi per venire visualizzata, potresti dover utilizzare un'attesa :
new WebDriverWait(driver, TimeSpan.FromSeconds(10))
.Until(ExpectedConditions.ElementIsVisible(By.Id("Id_Of_Frame")));
Esci da una cornice:
driver.SwitchTo().DefaultContent()
Per uscire da una cornice usando C #
Per spostare lo stato attivo su un documento principale o il primo fotogramma della pagina. Devi usare la sintassi qui sotto.
. WebDriver.SwitchTo () DefaultContent ();
Passa tra i frame secondari di un frame principale.
Considera di avere un frame padre (frame-padre). e 2 frame figlio (Frame_Son, Frame_Daughter). Vediamo le varie condizioni e come gestirle.
1. Da genitore a figlio o figlia:
driver.switchTo().frame("Frame_Son");
driver.switchTo().frame("Frame_Daughter");
2. Da Figlio a padre: se genitore è frame predefinito, passa al frame predefinito, altrimenti dal frame switch predefinito al frame principale. Ma non puoi passare direttamente da figlio a genitore.
driver.switchTo().defaultContent();
driver.switchTo().frame("Frame_Parent");
3. Da figlio a figlia: se tua sorella commette qualche errore non urlare contro di lei, rivolgiti semplicemente al tuo genitore. Allo stesso modo, dai il controllo al frame principale e poi al frame figlia.
driver.switchTo().defaultContent();
driver.switchTo().frame("Frame_Parent");
driver.switchTo().frame("Frame_Daughter");
Attendi il caricamento dei frame
In alcuni casi il tuo frame potrebbe non essere visualizzato immediatamente e probabilmente dovrai attendere fino al momento del caricamento. Oppure avrai NoSuchFrameException.
Quindi è sempre una buona scelta aspettare prima di cambiare. Di seguito è un modo ideale per attendere fino a quando viene caricato un frame.
try{
new WebDriverWait(driver, 300).ignoring(StaleElementReferenceException.class).
ignoring(WebDriverException.class).
until(ExpectedConditions.visibilityOf((driver.findElement(By.id("cpmInteractionDivFrame"))));}
catch{
// genera un'eccezione solo se il frame non è visibile con il tempo di attesa di 300 secondi}