package com.codeborne.selenide.commands; import com.codeborne.selenide.Command; import com.codeborne.selenide.SelenideElement; import com.codeborne.selenide.impl.WebElementSource; import org.openqa.selenium.By; import static java.lang.String.format; public class GetClosest implements Command<SelenideElement> { @Override public SelenideElement execute(SelenideElement proxy, WebElementSource locator, Object[] args) { String tagOrClass = (String) args[0]; String xpath = tagOrClass.startsWith(".") ? format("ancestor::*[contains(concat(' ', normalize-space(@class), ' '), ' %s ')][1]", tagOrClass.substring(1)) : format("ancestor::%s[1]", tagOrClass); return locator.find(proxy, By.xpath(xpath), 0); } }