plugin google for extensiones extension ext chrome internet-explorer-9 webdriver selenium-webdriver

internet-explorer-9 - google - webdriver chrome



Selenium 2.0b3 IE WebDriver, haga clic en no disparar (18)

Absolutamente ninguna de las otras cosas funcionó para mí. Algunos InternetExplorerDriver click () s me estaban funcionando, otros no. Luego descubrí que había perdido una línea en la documentación : el nivel de zoom del navegador debe establecerse en 100%.

Estoy seguro de que todas las otras respuestas se refieren a casos en los que el nivel de zoom ya está al 100%, pero sí solucionó mi caso. Entonces revisa eso primero.

Al usar el controlador IE con IE9, ocasionalmente el método Click solo seleccionará un botón, no hará la acción del Click (). Tenga en cuenta que esto solo ocurre de vez en cuando, así que no creo que sea el código el problema. Usar el controlador de Firefox con Firefox4 no tiene problemas. También estoy teniendo un problema donde los elementos no se encuentran ocasionalmente también, pero solo en IE nuevamente, no en Firefox.

if (Driver.FindElement(By.Name("username")) == null) { //sometimes gets here in IE, never gets here in Firefox } Driver.FindElement(By.Name("username")).SendKeys(username); Driver.FindElement(By.Name("surname")).SendKeys(surname); Driver.FindElement(By.Name("firstname")).SendKeys(firstname); string url = Driver.Url; Driver.FindElement(By.Name("cmd")).Click(); if (Driver.Url == url) { //if the page didnt change, click the link again Driver.FindElement(By.Name("cmd")).Click(); }

He visto preguntas similares (http://stackoverflow.com/questions/4737205/selenium-webdriver-ie-button-issue), pero no tengo identificadores generados dinámicamente.


Después de buscar un poco más encontré dos cosas que parecen haber ayudado en las pruebas repetibles:

Primero agregué una Espera implícita de 5 segundos. No estoy seguro de si esto se aplica a todas las funciones de FindElement, pero he dejado de obtener la mayor parte de la NoSuchElementException que recibía.

OpenQA.Selenium.IE.InternetExplorerDriver driver = new OpenQA.Selenium.IE.InternetExplorerDriver(); driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 0, 5, 0)); //driver.Manage().Speed = Speed.Medium;

Segundo, estaba teniendo problemas con una función de Cerrar sesión y cambié el código a:

public LoginPageObject Logout() { Driver.FindElement(By.LinkText("Logout")).Click(); OpenQA.Selenium.Support.UI.IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(Driver, TimeSpan.FromSeconds(5)); IWebElement element = wait.Until(driver => driver.FindElement(By.Name("username"))); LoginPageObject lpage = new LoginPageObject(Driver); return lpage; }

La espera explícita parece manejar lo que ImplicitlyWait no capta (creo que debido a los redireccionamientos).

http://code.google.com/p/selenium/source/browse/trunk/support/src/csharp/webdriver-support/UI/WebDriverWait.cs?r=10855


Encuentro que el controlador de IE tiene errores y que la misma versión de mi código se comporta de manera diferente en diferentes máquinas con la misma versión de IE.

Para obtener consistentemente antes de cada acción, hago lo siguiente.

driver.SwitchTo().Window(driver.CurrentWindowHandle);//Force Focus

Para mí, esto hace que el controlador IE se comporte más como se esperaba.


Estoy experimentando esto con 2.0rc2, IE8, Java también. El problema que tengo con la implementación de una solución que puede enviar varios clics es que a veces funciona. En esos casos, hacer clic en mis objetos dos veces no permite que el resto de la prueba avance. El envío de la tecla "Enter" tampoco funciona en nuestros controles.

Hay un problema similar logged para esto, pero mis objetos no están necesariamente cerca del "punto de vista". Cualquier otra sugerencia sería muy apreciada.


Estoy usando la versión IE: 9 Estaba enfrentando el mismo problema. Lo siguiente funcionó en mi caso

element.sendKeys(Keys.ENTER); element.click();


He encontrado lo mismo en Internet Explorer 8 cuando intento hacer clic en enlaces usando .Click() , aunque puedo ver que Selenium hace clic en el enlace. Desde mi experiencia, parece que si el navegador no tiene foco, entonces el clic inicial no funciona.

Una solución a esto es enviar un .Click() a otro elemento en la página, de modo que el navegador obtenga el foco, antes de intentar hacer clic en el enlace, por ejemplo, su padre:

Driver.FindElement(By.Id("Logout")).FindElement(By.XPath("..")).Click(); Driver.FindElement(By.Id("Logout")).Click();


Intente configurar las Opciones de Internet -> Seguridad -> Activar modo protegido en la misma configuración para todas las zonas , consulte http://www.mail-archive.com/[email protected]/msg13482.html . Esto es del grupo de google de Watir, pero en mis pruebas de Selenium 2, los clics en los botones de IE parecen funcionar mejor después de aplicar esto.


Mi solución fue:

Selenium WebDriver 2.29.0 (JAVA), PROBADO con FF16 e IE9

Antes de hacer un findElement, hice una pantalla de navegador de maxime. Funciona bien.

public void maximeBrowser() { Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension screenResolution = new Dimension((int)toolkit.getScreenSize().getWidth(), (int)toolkit.getScreenSize().getHeight()); //Maximize the browser logger.info("Maximizing the browser : getWidth ["+screenResolution.getWidth()+"] - getHeight ["+screenResolution.getHeight()+"]"); getDriver().manage().window().maximize(); }


Ninguna de las soluciones anteriores funcionó para mí. Esto hizo el truco sin embargo:

Java

element.sendKeys(org.openqa.selenium.Keys.CONTROL); element.click();

Groovy

element << org.openqa.selenium.Keys.CONTROL element.click()

Geb

O bien, si está utilizando Geb , hay una solución aún mejor que es completamente discreta:

(probado con IE7 y Geb 0.7.0 )

abstract class BaseSpec extends geb.spock.GebSpec { static { def oldClick = geb.navigator.NonEmptyNavigator.metaClass.getMetaMethod("click") def metaclass = new geb.navigator.AttributeAccessingMetaClass(new ExpandoMetaClass(geb.navigator.NonEmptyNavigator)) // Wrap the original click method metaclass.click = {-> delegate << org.openqa.selenium.Keys.CONTROL oldClick.invoke(delegate) } metaclass.initialize() geb.navigator.NonEmptyNavigator.metaClass = metaclass } } class ClickSpec extends BaseSpec { def "verify click"() { given: to HomePage expect: waitFor { at HomePage } when: dialog.dismiss() // Call the wrapped .click() method normally $(''#someLink'').click() then: waitFor { at SomePage } } } class HomePage extends geb.Page { static url = "index.html" static at = { title == "Home - Example.com" } static content = { dialog { module DialogModule } } } class SomePage extends geb.Page { ... } class DialogModule extends geb.Module { def dismiss() { ... } }

En mi caso, al hacer clic en IE7 parecía fallar cada vez que estaba precedido por el cierre de una superposición modal animada (estamos usando el diálogo modal de superposición de jQuery Tools ). El método Geb anterior resolvió este problema.


Otro:

v2.29.0

WebDriver: * Compatible con Firefox 18. * IEDriver admite la capacidad deseada "requireWindowFocus". Al usar esto y eventos nativos, el controlador de IE exigirá enfoque y las interacciones del usuario utilizarán SendInput () para simular las interacciones del usuario. Tenga en cuenta que esto significará que NO DEBE utilizar la máquina que ejecuta IE para nada más a medida que se ejecutan las pruebas.


PHPUnit + facebook / php-webdriver a veces la función click () no marca el elemento de casilla de verificación.

mi solución es:

$Element = $WebDriver->findElement( WebDriverBy::id(''checkbox_id'') ); if(false === $Element->isSelected()) { $Element->sendKeys(WebDriverKeys::SPACE); }


Refactoreé mi solución basándome en la referencia de Selenium WebDriver 2.15.0 en mi proyecto y el uso de Selenium WebDriver Server 2.16.0 y he hecho las siguientes observaciones:

  • El evento click se dispara correctamente cuando se usa el FirefoxDriver
  • El evento click no se RemoteWebDriver correctamente para ciertos controles cuando se usa RemoteWebDriver para las DesiredCapabilities.Firefox
  • El evento click se RemoteWebDriver correctamente cuando se usa RemoteWebDriver para las DesiredCapabilities.HtmlUnit y DesiredCapabilities.HtmlUnitWithJavaScript
  • El InternetExplorerDriver y el RemoteWebDriver con DesiredCapabilities.InternetExplorer (realmente lo mismo) todavía me están dando resultados inconsistentes que me resultan difíciles de precisar.

Mi solución para los primeros tres puntos ha sido crear mis propias clases que extienden RemoteWebDriver y RemoteWebElement para que pueda ocultar mi comportamiento personalizado del código de prueba que sigue IRemoteWebDriver referencia a IRemoteWebDriver e IWebElement .

Tengo debajo de mis "ajustes" actuales, pero si opta por estas clases personalizadas, podrá ajustar el comportamiento de su controlador y elemento web al contenido de su corazón sin tener que cambiar el código de prueba.

public class MyRemoteWebDriver : RemoteWebDriver { //Constructors... protected override RemoteWebElement CreateElement(string elementId) { return new MyWebElement(this, elementId); } } public class MyWebElement : RemoteWebElement, IWebElement { //Constructor... void IWebElement.Click() { if (Settings.Default.WebDriver.StartsWith("HtmlUnit")) { Click(); return; } if (TagName == "a") { SendKeys("/n"); Thread.Sleep(100); return; } if (TagName == "input") { switch (GetAttribute("type")) { case "submit": case "image": Submit(); return; case "checkbox": case "radio": //Send the ''spacebar'' keystroke SendKeys(" "); return; } } //If no special conditions are detected, just run the normal click Click(); } }


Resolví el problema con .click () al lado. Usé JS y executeScript (JS, WebElement el) en lugar de .click ().
Ejemplo:

protected void clickForIE(WebElement element){ ((JavascriptExecutor)wd).executeScript("var tmp = arguments[0]; tmp.click()", element); }

Pero después de usar este método debemos esperar mientras carga la página. Y es por eso que utilicé el próximo método:

protected synchronized void pageWaitLoad() { String str = null; try { str = (String)((JavascriptExecutor)wd).executeScript("return document.readyState"); } catch (Exception e) { // it''s need when JS isn''t worked pageWaitLoad(); return; } System.out.println("ttt " + str); while(!str.equals("complete")){ try { Thread.currentThread().sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } str = (String)((JavascriptExecutor)wd).executeScript("return document.readyState"); } }

Debe llamar a pageWaitLoad () cada vez después de hacer clic en ForFie ().


Respuesta corta:
Si está ejecutando una prueba automática de Selenium en IE11 con la ventana del navegador abierta en un monitor de pantalla táctil (por ejemplo, la computadora portátil con pantalla táctil de Windows 8), intente ejecutar la prueba con la ventana del navegador abierta en una pantalla no táctil .
El método .click () original debería funcionar bien sin todas las soluciones provisionales del código.

Respuesta de fondo:
Trabajé con un probador en nuestro equipo de control de calidad para investigar un problema similar. Después de probar la mayoría de las soluciones de código aquí y en el problema del botón IE del selenium webdriver , finalmente descubrimos que el problema solo ocurrió en IE (versión 11 para nosotros) en la pantalla táctil del ordenador portátil Windows 8 del probador.
Ejecutar la prueba Selenium con la ventana IE ejecutándose en su monitor Dell externo permitió que la prueba funcionara bien todas las veces, incluso utilizando solo la llamada estándar .click ().
También fallamos en el evento de clic para un botón en un cuadro de diálogo Magnific Popup ( http://dimsemenov.com/plugins/magnific-popup/ ).

Mi hipótesis: hay un problema con la forma en que IE11 (no estoy seguro acerca de otras versiones) maneja la traducción de eventos táctiles a / desde eventos de clic del mouse en pantallas táctiles.


Tengo el mismo problema, el clic no funciona con mi IE. Encontré una solución donde hago un Driver.FindElement (By.Name ("...")). SendKeys ("/ n") para realizar el clic (básicamente, solo presiono enter en el botón). ¡No muy limpio, pero funciona hasta que se resuelva el problema!


Una mejor manera de forzar el enfoque en el elemento es usar Javascript. Esto funciona cuando tus elementos están etiquetados con el atributo id. Si no lo son, consigue que los desarrolladores lo cambien.

Encuentra el elemento usando el localizador / propiedades que necesites. Una vez que se recupera el elemento, verifique si contiene un atributo de ID. Si lo hace, ejecute el siguiente código que forzará el enfoque al elemento:

JavascriptExecutor executor = (JavascriptExecutor) webDriver(); executor.executeScript("document.getElementById(''" + element.GetAttribute("id") + "'').focus()");

Al usar esto, casi todos los problemas con clics perdidos se resolvieron al usar InternetExplorerDriver.


Utilicé, como solución, SendKeys con una cadena vacía antes de cada clic:

element.SendKeys(""); element.Click();


WebdriverJS

En IE cuando intenta realizar una acción de clic (), la URL permanece parpadeando en la barra de estado. Significa que el controlador se está enfocando en el elemento y tratando de realizar una acción de clic (). Para completar su acción click (), utilicé el método sleep () antes y después de cada acción de clic.

Prueba este ejemplo.

var webdriver = require(''..''), By = webdriver.By, until = webdriver.until; var driver = new webdriver.Builder().usingServer().withCapabilities({''browserName'': ''ie'' }).build(); driver.get(''http://www.google.com'') .then(function(){ driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(1000 * 3); driver.findElement(By.name(''q'')).sendKeys(''webdriver''); driver.findElement(By.name(''btnG'')).then(function(button){ button.click(); }); }) .then(function(){ driver.findElement(By.css(''div[class="gb_Zb"] a[title="Google Apps"]'')).then(function(apps){ apps.click(); driver.findElements(By.css(''a[class="gb_O"]'')).then(function(appsList){ console.log("apps : "+appsList.length); for(var i = 0; i < appsList.length; i++){ console.log(''applications : ''+i); if(i == 5) { var element = appsList[i]; driver.sleep(1000 * 5); driver.executeScript("var tmp = arguments[0]; tmp.click()", element); driver.sleep(1000 * 5); } } }) }) }) .then(null, function(err) { console.error("An error was thrown! By Promise... " + err); }); driver.quit();

para hacer clic podemos usar cualquiera de estos, probado en IE

element.click(); driver.actions().click(element).perform(); driver.executeScript("var tmp = arguments[0]; tmp.click()", element);