Selenium C# Получение значений из столбца таблицы и превращение их в список строк - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно получить значения столбца 2 и превратить их в список String. Может кто-нибудь показать мне, как это сделать? Большое спасибо

IWebElement tableElement = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/div[2]/div/p-table/div/div/div/div[2]/table/tbody"));
            IList<IWebElement> rows = tableElement.FindElements(By.TagName("tr"));
            IList<IWebElement> rowtd;
            var Code1 = new List<string>();
            foreach (IWebElement row in rows)
            {
                rowtd = tableElement.FindElements(By.TagName("td"));
                var tableData = rowtd.ToString();
                Code1.Add(tableData);
            }

введите здесь описание изображения

Я тестирую функцию поиска и хочу сравнить результаты с введенными. Полный тестовый код функции поиска:

public void Search_XE_with_Name(String Name)
        {

            Login();

            driver.Navigate().GoToUrl(homeURL + "/app/admin/xe-group11");
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(15);
            Thread.Sleep(8000);
            //Act

            driver.FindElement(By.Name("xE_NAME")).Clear();
            driver.FindElement(By.Name("xE_NAME")).SendKeys(Name);
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(7);

            IWebElement ele = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/form/div/div[1]/div/div/div/span[3]/button/i"));
            IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
            executor.ExecuteScript("arguments[0].click();", ele);
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);


            //IWebElement tableElement = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/div[2]/div/p-table/div/div/div/div[2]/table/tbody"));
            //IList<IWebElement> rows = tableElement.FindElements(By.TagName("tr"));
            //List<String> Name1 = new List<String>();

            IWebElement tableElement = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/div[2]/div/p-table/div/div/div/div[2]/table/tbody"));
            IList<IWebElement> rows = tableElement.FindElements(By.TagName("tr"));
            //IList<IWebElement> rowtd;
            List<string> Code1 = new List<string>();

            foreach (IWebElement row in rows)
            {
                var secondColumn = tableElement.FindElements(By.TagName("td"))[2];
                Code1.Add(secondColumn.Text);
            }

            foreach (String codes in Code1)
            {
                Assert.AreEqual(codes, Name);
            }

        
            
            driver.Close();
        }

1 Ответ

0 голосов
/ 21 июня 2020

Вы должны иметь возможность просто использовать индекс, чтобы всегда получать второй столбец каждой строки ...

foreach (IWebElement row in rows)
{
   var secondColumn = tableElement.FindElements(By.TagName("td"))[1];
   Code1.Add(secondColumn.Text);
}
...