Estoy tratando de seleccionar una opción de un menú desplegable para las pruebas angulares e2e usando un transportador.
Aquí está el fragmento de código de la opción de selección:
<select id="locregion" class="create_select ng-pristine ng-invalid ng-invalid-required" required="" ng-disabled="organization.id !== undefined" ng-options="o.id as o.name for o in organizations" ng-model="organization.parent_id">
<option value="?" selected="selected"></option>
<option value="0">Ranjans Mobile Testing</option>
<option value="1">BeaverBox Testing</option>
<option value="2">BadgerBox</option>
<option value="3">CritterCase</option>
<option value="4">BoxLox</option>
<option value="5">BooBoBum</option>
</select>
Yo he tratado:
ptor.findElement(protractor.By.css('select option:1')).click();
Esto me da el siguiente error:
Se especificó una cadena no válida o ilegal Información de compilación: versión: '2.35.0', revisión: 'c916b9d', hora: '2013-08-12 15:42:01' Información del sistema: os.name: 'Mac OS X' , os.arch: 'x86_64', os.version: '10 .9 ', java.version:' 1.6.0_65 'Información del controlador: driver.version: desconocido
También he probado:
ptor.findElement(protractor.By.xpath('/html/body/div[2]/div/div[4]/div/div/div/div[3]/ng-include/div/div[2]/div/div/organization-form/form/div[2]/select/option[3]')).click();
Esto me da el siguiente error:
ElementNotVisibleError: El elemento no está visible actualmente y, por lo tanto, no se puede interactuar con la duración o el tiempo de espera del comando: 9 milisegundos Información de compilación: versión: '2.35.0', revisión: 'c916b9d', hora: '2013-08-12 15:42: 01 'Información del sistema: os.name:' Mac OS X ', os.arch:' x86_64 ', os.version: '10 .9', java.version: '1.6.0_65' ID de sesión: bdeb8088-d8ad-0f49-aad9 -82201c45c63f Información del controlador: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{plataforma = MAC, acceptSslCerts = true, javascriptEnabled = true, browserName = firefox, rotatable = false, locationContextEnabled = true, version = 24.0, cssSelectorsEnabled = true = true, handleAlerts = true, browserConnectionEnabled = true, nativeEvents = false, webStorageEnabled = true, applicationCacheEnabled = false, takesScreenshot = true}]
¿Alguien puede ayudarme con este problema o arrojar algo de luz sobre lo que podría estar haciendo mal aquí?
fuente
Para mi funciono como un encanto
Espero eso ayude.
fuente
ElementFinder
es capaz de encadenar, por lo que puede hacer:element(by.css('.specific-select')).element(by.cssContainingText('option', 'BeaverBox Testing')).click();
Un enfoque elegante implicaría hacer una abstracción similar a lo que ofrecen otros enlaces de lenguaje de selenio listos para usar (por ejemplo,
Select
clases en Python o Java).Hagamos un contenedor conveniente y ocultemos los detalles de implementación dentro:
Ejemplo de uso (tenga en cuenta lo legible y fácil de usar que es):
Solución tomada del siguiente tema: Seleccione -> abstracción de opciones .
Para su información, creó una solicitud de función: Seleccione -> abstracción de opciones .
fuente
click()
. Gracias.fuente
Para acceder a una opción específica, debe proporcionar el selector nth-child ():
fuente
Así es como hice mi selección.
fuente
Así es como lo hice:
fuente
waitForAngular()
método del transportador .Prueba esto, me está funcionando:
fuente
Puedes probar esto espero que funcione
fuente
Otra forma de configurar un elemento de opción:
fuente
Para seleccionar elementos (opciones) con identificadores únicos como aquí:
Estoy usando esto:
fuente
Escribimos una biblioteca que incluye 3 formas de seleccionar una opción:
Una característica adicional de estas funciones es que esperan a que se muestre el elemento antes de realizar cualquier acción en el
select
.Puede encontrarlo en npm @ hetznercloud / protractor-test-helper . También se proporcionan tipificaciones para TypeScript.
fuente
Quizás no súper elegante, pero eficiente:
Esto solo envía la tecla hacia abajo en la selección que desea, en nuestro caso, estamos usando modelSelector pero obviamente puede usar cualquier otro selector.
Luego, en mi modelo de objeto de página:
Y de la prueba:
fuente
El problema es que las soluciones que funcionan en cuadros de selección angulares regulares no funcionan con Angular Material md-select y md-option usando transportador. Este fue publicado por otro, pero funcionó para mí y todavía no puedo comentar su publicación (solo 23 puntos de repetición). Además, lo limpié un poco, en lugar de browser.sleep, usé browser.waitForAngular ();
fuente
element(by.model('selectModel')).click(); element(by.css('md-option[value="searchOptionValue"]')).click();
mdSelectElement.getAttribute('aria-owns').then( function(val) { let selectMenuContainer = element(by.id(val)); selectMenuContainer.element(by.css('md-option[value="foo"]')).click(); } );
Hay un problema con la selección de opciones en Firefox que el truco de Droogans corrige que quiero mencionar aquí explícitamente, con la esperanza de que pueda ahorrarle algunos problemas a alguien: https://github.com/angular/protractor/issues/480 .
Incluso si sus pruebas pasan localmente con Firefox, es posible que estén fallando en CircleCI o TravisCI o lo que sea que esté usando para CI e implementación. Ser consciente de este problema desde el principio me habría ahorrado mucho tiempo :)
fuente
Ayudante para configurar el elemento de una opción:
fuente
Si a continuación se muestra el menú desplegable
Entonces el código de protractorjs puede ser-
Fuente- https://github.com/angular/protractor/issues/600
fuente
Seleccione la opción por índice:
fuente
He mejorado un poco la solución escrita por PaulL. En primer lugar, arreglé el código para que fuera compatible con la última API de transportador. Y luego declaro la función en la sección 'onPrepare' de un archivo de configuración de Protractor como miembro de la instancia del navegador , por lo que se puede hacer referencia a ella desde cualquier especificación e2e.
fuente
He estado buscando en la red una respuesta sobre cómo seleccionar una opción en el menú desplegable de un modelo y he usado esta combinación que me ha ayudado con el material angular.
parece que al lanzar el código todo en una línea podría encontrar el elemento en el menú desplegable.
Tomó mucho tiempo para esta solución, espero que esto ayude a alguien.
fuente
Queríamos usar la elegante solución de allí usando material de angularjs, pero no funcionó porque en realidad no hay etiquetas option / md-option en el DOM hasta que se haya hecho clic en md-select. Así que la forma "elegante" no funcionó para nosotros (¡tenga en cuenta el material angular!). Esto es lo que hicimos, no sé si es la mejor manera, pero definitivamente funciona ahora.
Necesitábamos tener 4 selecciones seleccionadas y mientras la selección está abierta, hay una superposición en la forma de seleccionar la siguiente selección. es por eso que tenemos que esperar 500ms para asegurarnos de que no nos metemos en problemas con los efectos materiales que aún están en acción.
fuente
Otra forma de configurar un elemento de opción:
fuente
fuente
Puede seleccionar opciones desplegables por valor:
$('#locregion').$('[value="1"]').click();
fuente
A continuación, se explica cómo hacerlo por valor de opción o índice . Este ejemplo es un poco burdo, pero muestra cómo hacer lo que quiere:
html:
ts:
fuente
fuente
Podemos crear una clase DropDown personalizada para esto y agregar un método como:
Además, para verificar qué valor está seleccionado actualmente, podemos tener:
fuente
El siguiente ejemplo es la forma más sencilla. He probado y aprobado en la versión de transportador
5.4.2
Código completo
fuente
Esta es una respuesta simple de una línea en la que angular tiene un localizador especial que puede ayudar a seleccionar e indexar de la lista.
fuente
Seleccione la opción por propiedad CSS
o
Donde locregion (id), organization.parent_id (nombre del modelo) son los atributos del elemento seleccionado.
fuente