Как получить только первые 3 элемента в таблице? Selenium Web Driver - PullRequest
1 голос
/ 13 марта 2020

Я просто хочу взять первые 3 <td> элементов в каждом ряду.

Так, например: «Ванесса 17 Социология», «Майк 18 Математика» и «Сэм 18 Engli sh»

Как мне go сделать это в Selenium с помощью веб-драйвера.

<table id= "table3">
   <thead> </thead>
  <tbody>
    <tr class="odd"> 
        <td> Vanessa   </td>
        <td> 17 </td>
        <td> Sociology </td>
        <td> Female </td>
        <td> Student </td>
   </tr>
    <tr class="even"> 
        <td> Mike   </td>
        <td> 18 </td>
        <td> Maths </td>
        <td> Male </td>
        <td> Student </td>
   </tr>
    <tr class="odd"> 
        <td> Sam   </td>
        <td> 18 </td>
        <td> English </td>
        <td> Female </td>
        <td> Student </td>
   </tr>
  </tbody>
</table>

На данный момент у меня есть только это: var mainStudents = driver.FindElements(By.Id("table3"));

Как и ожидалось, это возвращает всю таблицу, включая <th> и все <td>, которые я не могу не хочу.

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Я взял все элементы таким образом и просто перебрал их со счетчиком, чтобы получить нужный мне результат.

IList<IWebElement> trList = driver.FindElements(By.XPath("//table[@id='table3']//tr//td[position()<4]"));
int count = 0;
foreach (var trElement in trList)
{

    Console.Write(trElement.Text  + " ");
    count++;
    if (count == 3)
    {
        count = 0;
        Console.WriteLine("");

    }
}
0 голосов
/ 13 марта 2020

Следующий xpath получит первые 3 столбца в каждой строке. Вы должны получить количество строк и затем выполнить итерацию по нему.

//tbody/tr[row_number]/td[position()<4]

Было бы легко запустить jquery и получить желаемый результат, как показано ниже.

enter image description here

Вы можете обратиться к this , чтобы узнать, как запустить jquery в вашей программе Selenium C#. Вы можете создать строку jquery в своем скрипте на основе номера строки и затем отправить ее в виде запроса, как показано ниже.

var jqf = new JQueryFactory(driver); //Create the jQueryFactory
# write the loop here
   # with in the loop
   var row_text = jqf.Query("//tbody/tr[row_number]/td[position()<4]");
...