All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xlrit.gears.runner.utils.SelenideUtils Maven / Gradle / Ivy

There is a newer version: 1.17.1
Show newest version
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"));
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy