ho questo XPath: //*[@id="someId::button"]
Selenio WebDriver: trovare tutti gli elementi con simili id
Premendo mostra un elenco a discesa di valori.
Ora, so che tutti gli elementi della lista hanno un id in questo modo:
//*[@id="someId--popup::popupItemINDEX"]
, dove l'indice è un numero compreso tra 1 e qualunque sia il numero di opzioni sono.
Conosco anche il valore su cui devo fare clic.
Una domanda potrebbe essere: poiché io sarò sempre conoscere l'ID del pulsante che genera la discesa, è possibile ottenere tutti gli elementi nel menu a discesa con un metodo riutilizzabile? (Ho bisogno di interagire con più di un menu a discesa)
Il modo in cui ho pensato è: ottenere la radice del ID iniziale, come in:
//*[@id="someId
quindi aggiungere il resto: --popup::popupItem
. Ho anche bisogno di aggiungere l'indice e ho pensato che avrei potuto utilizzare un blocco try (al fine di ottenere anche se le eccezioni quando do un indice più grande del previsto) come questo:
for(int index=1;index<someBiggerThanExpectedNumber;index++){
try{
WebElement aux= driver.findElement(By.xpath(builtString+index+"\"]"));
if(aux.getText().equals(myDesiredValue))
aux.click();
}catch(Exception e){}
}
Si noti che sto usando la WebDriver api e java.
Mi piacerebbe sapere se questo funzionerebbe e se c'è un modo più semplice per farlo, date le informazioni iniziali che ho.
EDIT: Il mio modo suggerito opere, ma per una soluzione più semplice, la risposta accettata dovrebbe essere visto
cercando di trovare tutti gli elementi non funzionerà, poiché l'elenco viene generato ad-hoc, oltre alla parte id, tutti gli altri attributi hanno valori diversi per tutto il tempo, anche se i valori sono gli stessi. Per prima cosa devo premere il pulsante a discesa per poter accedere/vedere gli elementi. Grazie per l'input sulla ricerca di figli di elementi! – CosminO
Non riesco ancora a vedere il problema. Fare clic sul pulsante a discesa, quindi trovare tutti gli elementi visualizzati? –
'// * [contiene (@id, 'someId - popup :: popupItem') e text() = 'myDesiredValue']' seleziona l'elemento che ID contiene "someId - popup :: popupItem" e quale testo il valore è uguale al valore desiderato. ... dopo aver fatto clic sul pulsante a discesa, ovviamente. –