ruby selenium-webdriver css-selectors capybara

ruby - Ruta de selección de CSS para el cuadro de texto que viene inmediatamente después de h3 con el texto "Nombre de la empresa"



selenium-webdriver css-selectors (1)

A continuación está mi html

<div class="right" data-bindattr-13="13"> <h3>Company Name</h3> <div class="input-row"> <input id="ember4258" class="ember-view ember-text-field" type="text"/> </div> <h3>Full Company Legal Name</h3> <div class="input-row"> <input id="ember4259" class="ember-view ember-text-field" type="text"/> </div> <h3>Company Phone</h3> <div class="input-row"> <input id="ember4260" class="ember-view ember-text-field" type="text"/> </div> <h3>Federal Tax / Employer ID (EIN)</h3> <div class="input-row"> <input id="ember4261" class="ember-view ember-text-field" type="text"/> </div> </div>

Dado que el valor de clase de todos los campos de texto y los atributos de la clase div principal son los mismos, debo completar estos campos de texto sin utilizar enésima de tipo.

He trabajado para crear un selector de CSS que debe apuntar al cuadro de texto que está inmediatamente después de <h3>Full Company Legal Name</h3> .

h3: contiene (^ Nombre de la empresa $) + div> entrada

Pero mi script de Capybara no reconoce el camino anterior y arroja el siguiente error.

annotateInvalidSelectorError_ '': El selector dado h3: contiene la entrada (^ Nombre de la empresa $) + div> no es válida o no da como resultado un WebElement. Se produjo el siguiente error: (Selenium :: WebDriver :: Error :: InvalidSelectorError) InvalidSelectorError: Se ha especificado un selector no válido o ilegal.

¿Alguien puede proporcionar un CSS que coincida con mi requisito?

Saludos, Avinash Duggirala


La pseudo clase contains estaba en desuso, por lo que se produce el InvalidSelectorError. Actualmente no hay forma de verificar nodos de texto usando selectores de CSS.

En su lugar, puede usar XPath para recorrer el DOM a los elementos hermanos.

text_field = page.find(:xpath, ''//h3[text() = "Company Name"]/following-sibling::div[1]/input'') text_field.set(''some value'')