Tengo siguiente tabla web dinámica

(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

En el lado izquierdo de id_no hay una casilla de verificación. Solo quiero marcar las filas donde FileName = 'filename1' y Date = '10 / 04/2019 '

Cuando uso este xpath en la consola de Chrome: $x("//tr[td[contains(text(),'filename1')]]")[0]'

Contiene la primera fila que contiene el valor "filename1". Obtengo el siguiente HTML para las filas de esta tabla web

<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>

Para marcar las casillas de verificación de las filas que contienen "filename1" estoy usando el siguiente código

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

¿Cómo puedo marcar las casillas de verificación donde FileName = 'filename1'y Date = '10 / 04/2019'?

Además, ¿cómo puedo desmarcar las casillas de verificación?

1
TLanni 3 oct. 2019 a las 23:18

4 respuestas

La mejor respuesta

Puede desmarcar las casillas de la misma manera que las marca, haciendo clic en el elemento input.

El localizador XPath que proporcionó es bueno. Para seleccionar otros elementos input debajo de los td, solo necesita cambiar el texto:

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

Para encontrar la entrada con ambos, puede usar esto:

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

Espero que esto ayude un poco.

3
Christine 3 oct. 2019 a las 20:55

Al HTML que ha publicado le falta el INPUT en el que desea hacer clic. Dada su descripción de la tabla, supongo que está dentro de los primeros TD de la fila, como se muestra a continuación.

<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>

Si este es el caso, el XPath a continuación funcionará

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

Si planea reutilizar este localizador con otros nombres de archivo y fechas, insertaría variables en el localizador. Hay muchas, muchas formas para insertar una variable en una cadena usando python. Si usa Python 3.6, puede usar los literales de cadena formateados a continuación, como ejemplo.

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

Ahora puede crear un método y pasar el nombre de archivo y la fecha y devolver el INPUT correcto fácilmente.

0
JeffC 3 oct. 2019 a las 21:37

El siguiente código marcará y desmarcará las casillas de verificación donde FileName = 'filename1' y Date = '10 / 04/2019 '.

driver.find_element_by_xpath("//tr[td[contains(text(),'10/04/2019')] and td[contains(text(),'filename1')] ]//input").click()
2
Yosuva A 4 oct. 2019 a las 05:16

¿Podrías probar esto? $ x ('// tr [td [contiene (texto (), "nombre de archivo1")] y td [contiene (texto (), "10/04/2019")]]') Lo siento, no he entendido bien. Actualicé la respuesta.

-1
havass 4 oct. 2019 a las 10:40
58226330