Frage

So jetzt ich versuche, herauszufinden, wie ich den Fokus auf einen Rahmen in Selenium 2 umschalten kann, wenn der Rahmen keine Namen oder die ID hat? Für einen benannte Rahmen wir tun:

driver.SwitchTo().Frame(FrameName);

aber was dort ist kein Name? Hat jemand Erfahrung mit dieser hat?

War es hilfreich?

Lösung

driver.switchTo.frame () ist überladene einen Frame-Namen oder eine ganze Zahl zu akzeptieren. Dieser int ist ein 0 basierter Index des verfügbaren Frames. Der erste Frame wäre 0, die zweite 1 und so weiter.

Ich habe gerade einen wirklich schnellen Test mit der Java-Bindung und Firefox gegen diese HTML-Seite ausgeführt werden.

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

bin ich erfolgreich in der Lage driver.switchTo () zu verwenden, Rahmen (0). Bezug zu nehmen ein einzurahmen und . Driver.switchTo () Rahmen (1); um Zugang zu Rahmen b.

Andere Tipps

Sie können den Index des Rahmens verwenden. Da Sie nicht über Namen und ID für den Rahmen, driver.switchTo (). Rahmen (int Frameindex)

In Selen, wenn Sie wissen, dass die relative Position des Rahmens sollten Sie in der Lage sein, den selectFrame Befehl zu verwenden, mit der Zeichenfolge „relative = up“, um es mit einem Rahmen zu bewegen, z.B. selenium.SelectFrame("relative=up"); oder mit der oberen Rahmen Verwendung "relative = top"

springen

Sie können nur die ID Ihrer iframe geben anstelle von Iframe-Namen.

Bitte beachten Sie meine unten Beispiel ist es für mich gearbeitet.
Im Beispiel wechsle ich zu einem iframe in meiner Seite und in diesem iframe auf das Element klicken, die „worksheet0“.

Verwenden Sie den Code ein:

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

Die HTMLof der 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">

Neben der Verwendung des Index (wie die anderen Antworten vorschlagen), in C # Sie können die iFrame auswählen, indem tagName. Mein Beispiel geht davon gibt es eine und nur eine iFrame auf der Seite.

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();
}

. Hinweis: Sie haben die Informationen aus dem IWebElement .Text oder .Click zum Beispiel zu bekommen, bevor Driver.SwitchTo () aufrufen DefaultContent ();

Ich habe diese Erweiterungen Methoden, um Hilfe

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();
}

Ein Beispiel für die Erweiterungen Methoden:

public void ClickPrintButton()
{
    var iFrameDriver = Browser.Driver.SwitchToIFrame();
    try
    {
        iFrameDriver.FindElement(By.Id("saveButton")).Click();
    }
    finally
    {
        Browser.Driver.SwitchOutOfIFrame();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top