Как получить xpath данных в столбцах в этой динамической веб-таблице (python, selenium) - PullRequest
1 голос
/ 03 октября 2019

У меня есть следующая динамическая веб-таблица

(checkbox)   ID_No  country_code  Date          Time           UserName          FileName
            1       5           10/04/2019    12:05:45       xyz@gmail.com      filename1
            2       7           10/04/2019    13:05:45       pqr@gmail.com      filename2
            3       8           10/03/2019    14:05:45       pqr@gmail.com      filename2
            4       9           10/04/2019    14:08:45       pqr@gmail.com      filename1

С левой стороны id_no есть флажок. Я хочу проверять только те строки, где FileName = 'filename1' и Date = '10 / 04/ 2019 '

при использовании этого xpath в консоли Chrome: $x("//tr[td[contains(text(),'filename1')]]")[0]'

Содержит 1-ую строку, содержащую значение «filename1». Я получаю следующий HTML-код для строк этой веб-таблицы

<tr class="class1">
  <td width="2%"> </td>   <!–– checkbox ––>
  <td width="2%"> 1 </td>
  <td width="2%"> 5 </td>
  <td width="2%"> 10/04/2019 </td>
  <td width="2%"> 12:05:45 </td>
  <td width="2%" style=word-wrap:break-word> xyz@gmail.com </td>
  <td width="2%"> filename1 </td>
</tr>

Чтобы установить флажки строк, содержащих «filename1», я использую следующий код

driver = webdriver.Chrome() 
driver.get(website_URL) 
driver.find_element_by_xpath("//tr[td[contains(text(),'filename1')]]/input").click()

Как установить флажки, где FileName = 'filename1' и Date = '10/ 04/2019 '?

Кроме того, как снять флажки?

Ответы [ 4 ]

3 голосов
/ 03 октября 2019

Вы можете снять флажки так же, как вы их проверяете - щелкнув элемент input.

Указанный вами локатор XPath является хорошим. Чтобы выбрать другие input элементы под td, вам просто нужно изменить текст:

driver.find_element_by_xpath("//tr[td[contains(text(),'10/04/2019')]]/input").click()

Чтобы найти ввод для обоих, вы можете использовать это:

driver.find_element_by_xpath("//tr[td[contains(text(),'filename1')] and td[contains(text(),'10/04/2019')]]/input").click()

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

2 голосов
/ 03 октября 2019

Приведенный ниже код будет проверять и снимать флажки, где FileName = 'filename1' и Date = '10 / 04/2019 '.

driver.find_element_by_xpath("//tr[td[contains(text(),'10/04/2019')] and td[contains(text(),'filename1')] ]//input").click()
0 голосов
/ 04 октября 2019

Не могли бы вы попробовать это? $ x ('// tr [td [содержит (text (), "filename1")] и td [содержит (text (), "10/04/2019")]]') Извините, я неправильно понял. Я обновил ответ.

0 голосов
/ 04 октября 2019

В опубликованном HTML-коде отсутствует INPUT, на который вы хотите нажать. Учитывая ваше описание таблицы, я предполагаю, что она находится внутри первого TD в строке, как я показал ниже.

<tr class="class1">
  <td width="2%"> <input type="checkbox"> </td>   <!–– checkbox ––>
  <td width="2%"> 1 </td>
  <td width="2%"> 5 </td>
  <td width="2%"> 10/04/2019 </td>
  <td width="2%"> 12:05:45 </td>
  <td width="2%" style=word-wrap:break-word> xyz@gmail.com </td>
  <td width="2%"> filename1 </td>
</tr>

В этом случае XPath ниже будет работать

//tr[./td[.=' filename1 ']][./td[.=' 10/04/2019 ']]/td/input

Если вы планируете повторно использовать этот локатор с другими именами файлов и датами, я бы вставил переменные в локатор. Существует много, много способов вставить переменную в строку, используя python. Если вы используете Python 3.6, вы можете использовать строковые литералы в формате ниже, например,

//tr[./td[.=' {filename} ']][./td[.=' {date} ']]/td/input

Теперь вы можете создать метод и передать имя файла, дату и возвращениеправильный INPUT легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...