c# selenium cleditor

Usando C#con selenio y cleditor



selenium (2)

Quiero ser capaz de configurar el cuerpo para un campo de texto cleditor usando selenio en c #, pero este proceso parece ser muy difícil. ¿Alguien puede explicarlo como si tuviera 4 años?


En google chrome navegue a la página haga clic con el botón derecho en el área editable del campo de texto. Haga clic en Inspeccionar elemento. Cuando se abra el html, haga clic con el botón derecho en el elemento resaltado y haga clic en Copiar XPath.

En el controlador web Selenium

IWebElement textField = driver.FindElement(By.XPath("Paste what you got from CHROME")); textField.SendKeys("Desired Text");


La lógica básica de Selenio es encontrar primero el elemento y luego realizar acciones en él.

Sin embargo, en este caso, tiene las siguientes dificultades:

  1. el editor está en un iframe
  2. el iframe no tiene id, name o incluso src significativo
  3. el editor no es un input o textarea, sino el body mismo.

Cómo navegar en iframes (el enlace de Arran debería ser un buen tutorial para mirar)

Use Firefox + Firebug + Firepath para encontrar iframes.

Como puede ver, hay cuatro iframes en la página, necesita uno de los siguientes métodos para cambiar al marco del editor, no a los otros marcos. ( fuente )

IWebDriver Frame(int frameIndex); // works but not desirable, as you have 4 frames, index might be changing IWebDriver Frame(string frameName); // not working, your editor doesn''t have frameName or id. IWebDriver Frame(IWebElement frameElement); // the way to go, find frame by xpath or css selector in your case

Entonces tenemos:

IWebElement iframe = driver.FindElement(By.XPath("//iframe[@src=''javascript:true;'']")); driver.SwitchTo().Frame(iframe);

Cómo enviar claves al editor

Una vez que su controlador está dentro del iframe, a través de Firebug, puede ver que el editor es en realidad el body , no de input o de textarea .

Entonces necesita encontrar el elemento del cuerpo, limpiarlo y enviar claves. Tenga en cuenta que Clear() puede no funcionar en el elemento del cuerpo, por lo que necesita utilizar IJavaScriptExecutor o enviar Control+a para seleccionar todo primero.

Cambiar de los iframes

Después de que se haya enviado algo de texto al editor, puede usar driver.SwitchTo().DefaultContent(); salir.

El código completado

using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; namespace SOTest { [TestClass] public class TestCLEditor { [TestMethod] public void TestMethod1() { IWebDriver driver = new FirefoxDriver(); driver.Navigate().GoToUrl("http://premiumsoftware.net/CLEditor"); // find frames by src like ''javascript:true;'' is really not a good idea, but works in this case IWebElement iframe = driver.FindElement(By.XPath("//iframe[@src=''javascript:true;'']")); driver.SwitchTo().Frame(iframe); IWebElement body = driver.FindElement(By.TagName("body")); // then you find the body body.SendKeys(Keys.Control + "a"); // send ''ctrl+a'' to select all body.SendKeys("Some text"); // alternative way to send keys to body // IJavaScriptExecutor jsExecutor = driver as IJavaScriptExecutor; // jsExecutor.ExecuteScript("var body = document.getElementsByTagName(''body'')[0]; body.innerHTML = ''Some text'';"); driver.Quit(); } } }