Question

Alors, en ce moment je suis en train de comprendre comment je peux mettre l'accent sur un cadre en Sélénium 2 lorsque le cadre n'a pas de nom ou l'identifiant? Pour un cadre nommé que je fais:

driver.SwitchTo().Frame(FrameName);

mais ce qui est il n'y a pas de nom? Quelqu'un at-il eu une expérience avec cela?

Était-ce utile?

La solution

driver.switchTo.frame () est surchargées pour accepter un nom de cadre ou d'un entier. Cet int est un 0 indice basé sur des images disponibles. La première trame serait 0, la seconde 1 et ainsi de suite.

Je viens de lancer un test très rapide en utilisant le java obligatoire et Firefox contre cette page HTML.

<html>
<frameset rows="50%,50%">
    <frame src="frame_a.htm" />
    <frame src="frame_b.htm" />
</frameset>
</html>

Je suis avec succès en mesure d'utiliser cadre (0) driver.switchTo (). de se référer à un cadre et driver.switchTo () cadre (1). de trame d'accès b.

Autres conseils

Vous pouvez utiliser l'index du cadre. Puisque vous n'avez pas le nom et l'identifiant pour le cadre, driver.switchTo () cadre. (int frameIndex)

En sélénium si vous savez que l'emplacement relatif du cadre, vous devriez être en mesure d'utiliser la commande selectFrame avec la chaîne « = rapport up » pour le déplacer un cadre par exemple selenium.SelectFrame("relative=up"); ou pour passer à l'utilisation de cadre supérieur "relative = top"

Vous pouvez juste donner l'identifiant de votre iframe au lieu de iframe nom.

S'il vous plaît voir mon exemple ci-dessous, il a travaillé pour moi.
Dans l'exemple que je suis passer à un iframe dans ma page et en cliquant sur l'élément dans ce iframe, qui est « worksheet0 ».

Utilisez le code:

driver.switchTo().frame("topframe");    
    WebElement worksheet0 = driver.findElement(By.xpath("//*@id='reportSelect:Worksheet_lbl']"));               worksheet0.click();             

Le HTMLof iframe:

  < iframe id="topframe" height="83px" frameborder="0" width="100%" scrolling="NO" '1331808552380'"="" +="" src="initialize.do?init=header&cacheBuster=" name="topframe" marginheight="0" marginwidth="0">

En plus d'utiliser l'indice (comme les autres réponses suggèrent), C # vous pouvez sélectionner l'iFrame par tagName. Mon exemple suppose qu'il existe un et un seul iFrame sur la page.

try
{
    var iFrameElement = Driver.FindElementByTagName("iFrame");
    var driver = Driver.SwitchTo().Frame(this.iFrameElement);    
    var element = driver.FindElement(selector);

    // do what you need with the element
}
finally
{
    // don't forget to switch back to the DefaultContent
    Driver.SwitchTo().DefaultContent();
}

Note:. Vous devez obtenir les informations de la IWebElement .Text ou .Cliquez par exemple, avant d'appeler Driver.SwitchTo () DefaultContent ();

J'ai créé ces méthodes pour aider les extensions

public static IWebDriver SwitchToIFrame(this RemoteWebDriver driver)
{
    // http://computerrecipes.wordpress.com/2012/08/23/selenium-webdriver-interact-with-an-element-inside-an-iframe/
    // http://stackoverflow.com/questions/3549584/selenium-2-switching-focus-to-a-frame-that-has-no-name-id
    var iFrameElement = driver.FindElementByTagName("iFrame");
    return driver.SwitchTo().Frame(iFrameElement);
}

public static void SwitchOutOfIFrame(this IWebDriver driver)
{
    driver.SwitchTo().DefaultContent();
}

Un exemple d'utilisation des méthodes d'extensions:

public void ClickPrintButton()
{
    var iFrameDriver = Browser.Driver.SwitchToIFrame();
    try
    {
        iFrameDriver.FindElement(By.Id("saveButton")).Click();
    }
    finally
    {
        Browser.Driver.SwitchOutOfIFrame();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top