[ad_1]
I want to pull all the items in the drop-down menu one by one into the datagridview rows using Selenium in C#. Can you help me on this issue?
Ce que j’ai essayé :
J’ai essayé les codes suivants.
I tried the code below, but these codes pull all elements into one line. <pre lang="C#"> List<IWebElement> selectElements = drv.FindElements(By.Id("dersler")); foreach (IWebElement select in selectElements) { var selectElement = new SelectElement(select); List<string> lst = new List<string>(); lst.Add(select.Text); DataTable dt = new DataTable(); DataColumn dtcol = new DataColumn(select.Text); dt.Columns.Add(dtcol); for (int i = 0; i < lst.Count; i++) { dataGridView1.DataSource = dt; } }
Solution 1
Selon votre extrait de code, quelques problèmes peuvent être à l’origine d’un comportement inattendu. Vous créez un DataTable
dans la boucle, ce qui la réinitialise à chaque itération. Pour résoudre ce problème, déplacez le DataTable
création en dehors de la boucle et définir le DataTable
comme le DataSource
après la boucle. Vous trouverez ci-dessous la version mise à jour de votre code :
C#
List<IWebElement> selectElements = drv.FindElements(By.Id("dersler")); // Create DataTable outside the loop to avoid resetting it in each iteration DataTable dt = new DataTable(); foreach (IWebElement select in selectElements) { var selectElement = new SelectElement(select); // Create a new column for each dropdown DataColumn dtcol = new DataColumn(selectElement.Text); dt.Columns.Add(dtcol); // Create a new row for each option in the dropdown foreach (IWebElement option in selectElement.Options) { DataRow row = dt.NewRow(); row[selectElement.Text] = option.Text; dt.Rows.Add(row); } } // Set the DataTable as the DataSource after the loop dataGridView1.DataSource = dt;
[ad_2]
コメント