Pour mon test automatisé utilisant Selenium en C#, je veux sélectionner un élément de la liste déroulante (n'importe lequel) à partir de l'écran d'accueil. type (réf. image jointe), mais comme les identifiants/xpaths de l'élément sélectionné sont générés dynamiquement à chaque chargement de page, le clic sur l'élément sélectionné échoue lorsque j'exécute mon script enregistré.
Par exemple mon script ci-dessous échoue, car XPath "//select[@name='Entrées[ db9ef219-0f54-4925-9589-0f39351f44a4 ].TypeID']" change à chaque fois que j'exécute le test dans VS.Net. Valeur db9ef219-0f54-4925-9589-0f39351f44a4 change chaque fois que la page se charge.
IWebElement selectType =
driver.FindElement(By.XPath("//select[@name='Entries[db9ef219-0f54-4925-9589-0f39351f44a4].TypeID']"));
selectType.Click();
Voici le code de la page - au chargement, pour chaque nouvelle ligne, une valeur unique (en dessous c'est c36582c1-131a-4f6f-8711-390048f5779f ) est générée et stockée sous la classe RegEffEntryContainer et est utilisé pour chaque élément de liste - type/description ( par exemple id="Entrées_c36582c1-131a-4f6f-8711-390048f5779f__TypeID", id= "Entrées_c36582c1-131a-4f6f-8711-390048f5779f__Organisation")
Toute aide pour résoudre ce problème serait très appréciée - merci d'avance !
FYI : Si j'utilise le code ci-dessous en utilisant Dynamic XPath, il ne fonctionnera que pour la première ligne et je ne pourrais pas enregistrer les entrées de lignes suivantes via le script. L'exigence est d'entrer les 3 entrées avant de cliquer. Enregistrer/Soumettre (non montré sur la capture d'écran ci-dessus).
IWebElement selectType = driver.FindElement(By.XPath("//select[contains(@id, '__TypeID')]"));
Merci. @JeffC pour votre suggestion - ajouter le code html comme suggéré - j'ai gardé l'image du code fourni précédemment.
<div class="RegEffEntryContainer" xpath="1">
<div class="row">
<div class="col-11">
<input type="hidden" name="Entries.index" autocomplete="off" value="21b28f6b-8aaa-4924-815a-1d925585fa36">
<input data-val="true" data-val-number="The field EntryID must be a number." data-val-required="The EntryID field is required." id="Entries_21b28f6b-8aaa-4924-815a-1d925585fa36__EntryID" name="Entries[21b28f6b-8aaa-4924-815a-1d925585fa36].EntryID" type="hidden" value="391">
<div class="row">
<div class="col-12 col-sm-6 col-lg-3">
<div class="field-wrapper">
<select class="form-control valid" data-val="true" data-val-number="The field TypeID must be a number." id="Entries_21b28f6b-8aaa-4924-815a-1d925585fa36__TypeID" name="Entries[21b28f6b-8aaa-4924-815a-1d925585fa36].TypeID" required="" aria-describedby="Entries_21b28f6b-8aaa-4924-815a-1d925585fa36__TypeID-error" aria-invalid="false">
<option value="">Select type</option>
<option value="1">Regulatory Activity</option>
<option value="2">Major Project</option>
<option value="3">Other Activities</option>
</select><span class="asterisk">*</span>
</div>
</div>
Mise à jour [27/02/2019 7:00 PM] - puisque les identifiants numériques ( value: 21b28f6b-8aaa-4924-815a-1d925585fa36 ci-dessus) utilisé pour TypeID/OrganisationID est créé dynamiquement lors du chargement de la page, existe-t-il un moyen d'utiliser l'option Javascript d'enregistrer cela dans une variable au chargement de la page et de réutiliser celle-ci pour créer un XPath pour l'identification des éléments plus tard ?