2016-08-08 47 views
2

kann kein Text über XPath an ein iFrame-Element gesendet werden. Ich möchte eine Textfolge mit Selenium an ein iFrame-Element senden. Bisher konnte ich dies mit dem Firefox-Treiber erreichen.Mit PhantomJS, Selenium

Wenn ich jedoch auf PhantomJS umschaltete, wird der Test ausgeführt, aber die Schlüssel wurden nie in die iFrame-Textbox eingegeben.

-Code wie folgt:

driverJS.SwitchTo().Frame(driverJS.FindElement(By.XPath("/html/body/div[1]/div[2]/div[9]/form/div[3]/div[1]/div/div/div/div/div/span/span[2]/span/table/tbody/tr[2]/td/iframe"))); 
//Switch to iFrame and locate element. 

driverJS.FindElement(By.XPath("/html/body")).SendKeys("bump this up!"); 
//Send keys to /html/body xpath of iFrame 

driverJS.SwitchTo().DefaultContent(); 
//Switch out of iFrame 

Der Weblink: here.

Das jeweilige Textfeld in Frage (schnelle Antwort Feld): enter image description here

Jede Hilfe wäre sehr dankbar.

Raw HTML iframe Körper, macht es keinen Namen daher zu XPath ich zurückgreifen:

<iframe frameborder="0" allowtransparency="true" tabindex="1" src="" title="Rich text editor, vB_Editor_QR_editor, press ALT 0 for help." style="width:100%;height:100%"> 

ich versucht habe, für den iframe-Rahmen-Index mit dem folgenden Code Suche:

System.Console.WriteLine("The total number of iframes are " + iFramList.Count()); 

    foreach (IWebElement i in iFramList) 
    { 
     if (driverJS.FindElement(By.XPath("/html/body/div/div[2]/div[9]/form/div[3]/div[1]/div/div/div/div/div/span/span[2]/span/table/tbody/tr[2]/td/iframe")).Displayed) 
     { 
      System.Console.WriteLine(i); 
     } 
    } 

die Ausgabe ist ich erhalte, ist:

The total number of iframes are 12 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 
OpenQA.Selenium.Remote.RemoteWebElement 

Welche, die ausgeführt werden, ohne die foreach ungerade Berücksichtigung ist Schleife führt stattdessen zu 13 iframes.

+0

Wo Sie tun, um eingestellten Wert wollen [in diesem Link] (http: // Foren .vr-zone.com/andere-hardware-komponenten/3382325-corsair-scimitar.html) .. ?? –

+0

Hallo, Entschuldigung in der "Quick Reply" iframe Textfeld. – user4985

+0

wo ist dieser Link "Schnelle Antwort". Ich bin nicht in der Lage zu sehen .. könnten Sie Screenshot teilen? –

Antwort

1

iframe Liste machen und versuchen, den Schalter von dort aus aufzurufen:

//look at the list in debug mode and find the iframe index 
IList<IWebElement> iFramList = driverJS.FindElement(By.TagName("iframe")); 

driverJS.SwitchTo().Frame(index); 

//after that you should send the text to textBox not the body, inspect the element and defind it by id or name like in that example 

driverJS.FindElement(By.XPath("/html/body")).SendKeys("bump this up!"); 
//Send keys to /html/body xpath of iFrame 

driverJS.FindElement(By.Id("<your textBoxId>")).SendKeys("bump this up!"); 

oder namentlich

driverJS.FindElement(By.Name("<your textBoxName>")).SendKeys("bump this up!"); 
+0

Hallo, ich laufe auf eine Fehlermeldung "OpenQA.Selenium.IWebElement" zu "System.Collections.Generic.IList ". Eine explizite Konvertierung existiert (fehlt Ihnen eine Besetzung?) " wenn ich die erste Zeile Ihres Vorschlags erfasse. – user4985

+0

@ user4985, ersetzen Sie 'FindElement', durch' FindElements' in der ersten Zeile. –

+0

Danke, es funktioniert. Ich schrieb eine Konsolen-Debug-Ausgabe und es zeigt, dass es 13 iframes auf der Seite gibt. Teste ich sie einzeln, um meinen speziellen iframe herauszufinden? – user4985