Usaría Selenium con Cromedrive para probar el sitio web en VisualStudio. El problema es que no veo elementos generados por Javascript en la página. Parece que chromedriver toma la fuente de página antes de ejecutar JS. Pasé 3 días con este tema pero todavía no funciona.

Encontré muchas sugerencias como esperar a que se cargue toda la página

driver.Navigate().GoToUrl("http://...");   
driver.WaitForPageToLoad();

System.Threading.Thread.Sleep(20000); 

O diferentes formas de esperar la carga del elemento

WebDriverWait waitForElement = new WebDriverWait(driver,TimeSpan.FromSeconds(5)); 
 waitForElement.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.Id("div.list-item[userid=2]")));

También probé diferentes formas de ejecutar javascript y obtener innerHTML

uid.GetAttribute("innerHTML");

..pero nada ayuda.

Solo tuve un progreso cuando usé el controlador PhantomJS. Funciona bien, pero necesito probarlo con Chrome.

Parece que los controladores procesan las páginas de forma diferente.

ChromeDriver

<div class="list-item" on-click="{{selectUser}}" userid="{{u.id}}">

PhantomJSDriver

<div class="list-item" on-click="{{ selectUser }}" userid="2">

Los elementos de Chrome tienen la misma vista que PhantomJS

<div class="list-item" on-click="{{ selectUser }}" userid="2"> ==$0

¿Tiene alguna idea de cómo obtener la misma fuente de página en ChromeDriver que en Chrome? Gracias.

0
Slavo 22 feb. 2018 a las 18:33

2 respuestas

La mejor respuesta

Tengo solución:

IWebElement elename = ((RemoteWebElement)driver).FindElementByCssSelector("whatyousearch");

En mi caso es:

IWebElement uid ((RemoteWebElement)shadowRoot3).FindElementByCssSelector("div[userid='2']");
0
Slavo 26 feb. 2018 a las 11:08

Gracias por tu respuesta. Parece que "DOM actual" es lo que necesito. Gracias por la pista. El problema es que cuando ejecuto el script para parentNode, veo todas las variables de JS solo en texto. Pic1

También puedo usar el primer valor para FindElement () pero la fuente de página sigue siendo la misma. Pic2

Entiendo lo que quiere decir con que pagesource es lo que se entregó desde el servidor (sin modificación de JS) pero necesito verlo como DOM actual (como pagesource del controlador PhantomJS con JS renderizado).

Lo probé con innerHTML y esto es exactamente lo que necesito

Pic3

Pero puedo usarlo con FindElement (By)

Pic4

¿Alguna idea de cómo agregar DOM actual a la fuente de página o cómo usar los valores que obtengo con parentNote con FindElement y poder hacer alguna acción como .Click ()?

0
Slavo 23 feb. 2018 a las 13:38