-
Notifications
You must be signed in to change notification settings - Fork 53
Busca por texto na página ignorando diferenças entre maiúsculas e minúsculas
ThiagoNicolielo edited this page Mar 14, 2017
·
9 revisions
Eu não costumo precisar buscar textos na página diferenciando maiúsculas de minúsculas, portanto, no meu projeto estou sobreescrevendo a frase "Então será exibido 'texto'" para tornar case insensitive (pois já tive problemas de aparentemente não encontrar textos, mas se tratava da frase ser case sensitive).
Basicamente apenas passei o texto e o conteúdo para lowercase, e também alterei a prioridade da frase para que seja utilizada ao invés da frase padrão do framework.
Para isto, no meu MySteps adicionei os seguintes métodos:
@Override
@Then(value = "será exibido \"$text\"", priority = 0)
public void textVisible(String text) {
// Element screen = runner.getScreen();
text = DataProviderUtil.replaceValue(text);
waitVisibleText_caseInsensitive(text);
}
/**
* Aguarda um texto ficar visível na página. É importante saber que textos
* que não estão visíveis mas estão no HTML não são considerados. Também não
* são considerados textos que estiverem dentro das tags SCRIPT e STYLE.
*
* @param text
* Texto a ser encontrado.
*/
public void waitVisibleText_caseInsensitive(String text) {
WebDriver driver = (WebDriver) runner.getDriver();
SwitchDriver frame = new SwitchDriver(driver);
final long startedTime = GregorianCalendar.getInstance()
.getTimeInMillis();
boolean found = false;
while (true) {
try {
driver.manage().timeouts()
.implicitlyWait(0, TimeUnit.MILLISECONDS);
// Mesmo que não tenha frame ele pega o "primeiro"
frame.bind();
// Quando tem somente 1 frame
if (frame.countFrames() == 1) {
List<WebElement> elementsFound = driver.findElements(By
.xpath("/html"));
String textHtml = elementsFound.get(0).getText();
log.debug("O tamanho do texto analizado é de ["
+ textHtml.length() + "]");
if (textHtml.contains(text)) {
// log.debug("Encontrou o texto [" + text +
// "] na página");
found = true;
break;
}
} else {
for (int i = 0; i < frame.countFrames(); i++) {
frame.switchNextFrame();
List<WebElement> elementsFound = driver.findElements(By
.xpath("/html"));
if (elementsFound.size() == 1) {
WebElement element = elementsFound.get(0);
String textHtml = element.getText();
log.debug("O tamanho do texto analizado é de ["
+ textHtml.length() + "]");
if (textHtml.toLowerCase().contains(
text.toLowerCase())) {
// log.debug("Encontrou o texto [" + text +
// "] na página utilizando os frames");
found = true;
break;
}
}
}
}
if (found) {
break;
}
} catch (BehaveException be) {
log.warn("waitVisibleText BehaveException");
log.warn(be);
} catch (Exception e) {
log.warn("waitVisibleText Exception");
log.warn(e);
} finally {
driver.manage()
.timeouts()
.implicitlyWait(BehaveConfig.getRunner_ScreenMaxWait(),
TimeUnit.MILLISECONDS);
// Controle do timeout manualmente
if (!found
&& (GregorianCalendar.getInstance().getTimeInMillis()
- startedTime > BehaveConfig
.getRunner_ScreenMaxWait())) {
Assert.fail(message.getString("message-text-not-found",
text));
}
}
}
}