Estoy tratando de automatizar un flujo de trabajo con un botón Enviar usando Selenium en Eclipse.

Estoy usando una función personalizada waitForVisible para verificar si se muestra WebElement con el ID 'naviInfo' y si contiene un mensaje que dice 'No se encontraron filas' o '{número} se encontraron filas' mensaje.

El problema es que no puedo ordenar y verificar la parte numérica del texto. Código de ejemplo a continuación.

String message = waitForVisible(By.id("naviInfo")).getText();

if ("No rows were found".equals(message)) {
      log.info("No rows were found after submit");
}
else if ("**1804** rows were found".equals(message)) {
      log.info("**1804** rows found after submit");
}
else {
      (other error checks)
}

¿Cómo verifico si se encuentra un valor numérico antes del texto común 'se encontraron filas'? Además también guardar este número en una variable?

0
Nitya 8 mar. 2017 a las 19:09

2 respuestas

La mejor respuesta

Si lo entiendo bien, ¿solo está preguntando cómo validar el mensaje que coincide con el patrón esperado y cómo extraer el número de la cadena? En ese caso, esto no tiene nada que ver con Selenium, pero es una simple pregunta de expresión regular.

Pattern p = Pattern.compile("^\\*{2}(\\d+)\\*{2} rows were found$"); //pattern that says: start of string, followed by two *s, then some digits, then two *s again, then the string " rows were found", and finally the end of string, capturing the digits only
Matcher m = p.matcher("**1804** rows were found");    
boolean found = m.find(); //find and capture the pattern of interest
if (found)
   int count = Integer.parseInt(m.group(1)); //get the first (and only) captured group, and parse the integer from it

Lea sobre expresiones regulares con Java aquí .

1
kaqqao 8 mar. 2017 a las 16:32

Así es como hice funcionar mi condición.

if (" no rows were found".equals(waitForVisible(By.id("naviInfo")).getText()))
     waitForVisible(By.xpath("//td[contains(text(),'Nothing found to display.')]"));
else if (Pattern.matches("^ \\d+ rows were found$", waitForVisible(By.id("naviInfo")).getText()))
     waitForVisible(By.xpath("//tbody//tr//td/a"));
else
     other error checks
0
Nitya 19 abr. 2017 a las 07:47