v'è una classe creata appositamente per select
elementi HTML (cioè gli elenchi a discesa).
È la classe SelectElement all'interno dello spazio dei nomi OpenQA.Selenium.Support.UI.
Questo è un wrapper attorno agli elementi select
, che fornisce un facile accesso alle cose comuni che le persone usano/interagiscono con gli elementi select
.
tuo esempio potrebbe essere tradotto in (utilizzando C# 3 o superiore, dal momento che sto utilizzando LINQ):
IList<IWebElement> selectElements = driver.FindElements(By.TagName("select"));
var displayedSelectElements = selectElements.Where(se => se.Displayed);
E 'importante sapere che cosa fa questo codice. Per prima cosa trovare tutti gli elementiselect
e inserirli in una nuova lista.
Sarà quindi filtrare quelli fuori, solo ai select
elementi che vengono visualizzati, vale a dire, la loro proprietà è .Displayed
vero. Questa è una traduzione diretta del tuo codice di esempio.
Tuttavia, non hai davvero specificato ciò che si sta cercando di fare, e penso che l'esempio è più adatto come questo:
var selectElement = new SelectElement(driver.FindElement(By.Id("something")));
var displayedOptions = selectElement.Options.Where(o => o.Displayed);
È possibile che questo avrebbe trovato un specificiselect
elementi, e il filtro le opzioni all'interno di che select
solo a quelle che vengono visualizzate. Anche in questo caso, hanno la loro proprietà .Displayed
come true.
Modifica
Dal momento che il codice di cui sopra è quello che ti serve, ma si desidera nella forma di un anello for
, una cosa simile sarebbe simile:
var selectElement = new SelectElement(driver.FindElement(By.Id("something")));
var allOptions = selectElement.Options;
for (int i = 0; i < allOptions.Length; i++)
{
if (allOptions[i].Displayed)
{
// do something
// like add to a new list?
}
}
Il secondo codice funziona per me. Grazie. – jessica
Ma posso usare lo stesso formato di per in C# invece di foreach? – jessica
@jessica, assolutamente, ho modificato il mio post per dimostrarlo - fammi sapere se non è ancora chiaro. – Arran