com.xlrit.gears.runner.utils.SelenideUtils Maven / Gradle / Ivy
package com.xlrit.gears.runner.utils;
import com.codeborne.selenide.SelenideElement;
import com.codeborne.selenide.WebDriverRunner;
import org.openqa.selenium.By;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.NoSuchElementException;
import java.util.regex.Pattern;
import static com.codeborne.selenide.Condition.*;
public class SelenideUtils {
private static final DateTimeFormatter dateParser = DateTimeFormatter.ISO_LOCAL_DATE;
private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("ddMMyyyy");
private static final DateTimeFormatter timeParser = DateTimeFormatter.ISO_LOCAL_TIME;
private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmm");
private static final DateTimeFormatter dateTimeParser = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("ddMMyyyyHHmm");
public static String cssId(String id) {
return String.format("#%s", escapeCSS(id));
}
private static String escapeCSS(String id) {
return id
.replace(".", "\\.")
.replace("[", "\\[")
.replace("]", "\\]");
}
public static String dateTimeToInput(String dateTime, String placeholder) {
return switch (placeholder) {
case "dd-mm-yyyy" -> LocalDate.parse(dateTime, dateParser).format(dateFormatter);
case "hh:mm" -> LocalTime.parse(dateTime, timeParser).format(timeFormatter);
case "dd-mm-yyyy hh:mm" -> LocalDateTime.parse(dateTime, dateTimeParser).format(dateTimeFormatter);
default -> throw new DateTimeException(String.format("Unsupported placeholder: %s", placeholder));
};
}
public static boolean hasRow(SelenideElement table, int rowNr) {
if (!table.findAll(String.format("#row-%d-add-button", rowNr)).isEmpty()) return true;
String id = table.getAttribute("id");
return !table.findAll(By.tagName("input"))
.filter(attributeMatching("name", String.format(".*%s\\[%d\\].*", escapeCSS(id), rowNr)))
.isEmpty();
}
public static boolean urlMatch(String pattern) {
return Pattern.matches(pattern, WebDriverRunner.url());
}
public static String getFormId() {
String[] split = WebDriverRunner.url().split("/");
return split[split.length - 1];
}
public static boolean isMultipleTable(SelenideElement element) {
return element.has(tagName("table"));
}
public static boolean isCombobox(SelenideElement element) {
return element.has(attribute("role", "combobox"));
}
public static boolean isTextInput(SelenideElement element) {
return (element.has(or("type",
attribute("type", "text"),
attribute("type", "number"))) &&
!isCombobox(element));
}
public static boolean isTextArea(SelenideElement element) {
return element.toWebElement().getTagName().equals("textarea");
}
public static boolean isFileInput(SelenideElement element) {
return false;
/*try {
SelenideElement file = element.find("[type='file']");
return file.toWebElement().getTagName().equals("input");
} catch (NoSuchElementException e) {
return false;
}*/
}
public static boolean isDatePicker(SelenideElement element) {
return element.has(attribute("type", "tel"));
}
}