Da un po 'di tempo utilizzo @FindBy
e adoro il fatto che l'elemento non venga individuato finché non è necessario (non in istanza).Come restituire un elemento web dinamico istanziato pigramente
Tuttavia, la pagina web può avere ovunque 2-10 di un certo elemento, e l'ID del sugli elementi sono numerati (in modo che il primo elemento ha un ID di "elemento1" e così via)
lo farei piace scrivere una funzione in cui posso passare un intero, e restituirà un WebElement con l'ID appropriato, E viene istanziato pigramente. Questo significa avere una funzione come la seguente non funziona:
public WebElement getElement(int numOnPage){
return driver.findElement(By.id("element"+numOnPage));
}
Perché l'istante che io chiamo che funziona il WebElement ottiene trova. (Il motivo per cui non può essere istanziato è perché ho una funzione che aspetta fino a quando l'elemento esiste chiamando ripetutamente isDisplayed() sopra, prendendo NoSuchElementException
s).
Mi rendo anche conto che potrei creare un List<WebElement>
che seleziona tramite CSS ogni elemento il cui ID inizia con "elemento" ma ho avuto altri casi in cui ho voluto restituire un elemento generato dinamicamente e ho dovuto usare una soluzione alternativa anche lì.
Grazie!
La causa era che ho una funzione in cui chiamo isDisplayed() (con un try/catch) più e più volte ... ma se passo l'elemento restituito da getElement(), e l'elemento non esiste ancora, getElement() lancia l'eccezione prima che colpisca mai la funzione che sta aspettando che esista. Grazie! –