Как получить определенный столбец из веб-таблицы в Selenium - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю в C # selenium и хочу извлечь определенный столбец из веб-таблицы для тестирования. Мне любопытно, если вы можете использовать

row.FindElements(By.TagName("wanted_col_name"));

чтобы захватить определенный столбец по имени или захватить его по номеру столбца

Таблица указана на веб-странице

HTML сайта

Я специально хочу получить элементы из линейки продуктов, объединить их с номером детали и затем поместить строки в массив. Примером этого вывода будет

BCA/A1
BCA/A2
PEN/30

Конечно, DELIVERED BY NOON, но я не знаю, как это исключить.

Код, который у меня есть сейчас, распечатывает каждый элемент таблицы, но не работает, когда я пытаюсь распечатать только нужный мне столбец, так как он включает всю строку в одну строку и строку DELIVERED BY NOON.

            IWebElement tableElement = driver.FindElement(By.XPath("//*[@id='InvoiceTable']/tbody"));
            IList<IWebElement> tableRow = tableElement.FindElements(By.TagName("tr"));
            IList<IWebElement> rowTD;

            foreach(IWebElement row in tableRow)
            {
                rowTD = row.FindElements(By.TagName("td"));

                foreach (IWebElement col in rowTD)
                {
                    TestContext.WriteLine(col.Text + " ... \n\n");
                }
            }

1 Ответ

0 голосов
/ 05 сентября 2018

Этот код делает то, что вы хотите для веб-сайта W3C о HTML-таблицах, проверенных и работающих:

        driver.Navigate().GoToUrl("https://www.w3schools.com/html/html_tables.asp");

        var table = driver.FindElement(By.Id("customers"));
        var rows = table.FindElements(By.TagName("tr"));

        foreach (var row in rows)
        {
            var tds= row.FindElements(By.TagName("td"));
            if (tds.Count > 2)
                Console.WriteLine("{0}/{1}", tds[0].Text, tds[2].Text);
        }

Он работает, выбирая таблицу клиентов, а затем объединяет текст первого столбца с 3-м столбцом в том же формате, что и в вашем примере.

Я добавил проверку tds.Count в цикле foreach, потому что первая таблица на демонстрационной странице W3C имеет заголовок таблицы, поэтому она возвращает 0 tds.

Надеюсь, это поможет.

...