Как прослушать, что было нажато в тесте?

#java #selenium #event-handling #webdriver

#java #селен #обработка событий #webdriver

Вопрос:

я пытаюсь регистрировать события щелчка, но

Пример:

кнопка в классе объекта страницы:

   public WebElement btnClear() {
  return driver.findElement(By.name("filter:P_ClearButtonDFID"));
 }
  

нажмите в тесте

 searchPage.btnClear().click();
  

Ведение журнала Listner:

 Clicked on: [[InternetExplorerDriver: internet explorer on WINDOWS (1cf610ba-607c-40a2-94bc-745f1e564bde)] -> name: filter:P_ClearButtonDFID]
  

нажмите прослушиватель:

 public void afterClickOn(WebElement element, WebDriver driver) {            
    System.out.println("clicked on: "   element.toString());
}
  

как я хочу:

 "Clicked: btnClear()" or "Clicked: btnClear"
  

Возможно ли это реализовать?
Мне не нужен локатор элементов журнала, потому что иногда у него нечитаемое имя, мне нужно записать свое собственное имя для элемента объекта страницы

Спасибо.

Ответ №1:

Попробуйте этот код (учитывая, что вы используете интерфейс WebDriverEventListner)

 public void afterClickOn(WebElement element, WebDriver driver) {            
    System.out.println("clicked on: "   element.getAttribute("name"));
}
  

или

 public void afterClickOn(WebElement element, WebDriver driver) {            
    System.out.println("clicked on: "   element.getAttribute("id"));
}
  

Комментарии:

1. как я уже говорил, мне не нужен локатор журналов или его атрибуты. мне нужно имя журнала для элемента объекта страницы btnClear

2. Попробуйте отражение, подобное element.getClass();

Ответ №2:

Что я имел в виду:

 import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebElement;
import org.apache.log4j.Logger;
import com.thoughtworks.selenium.webdriven.commands.IsElementPresent;

public class WebElem extends RemoteWebElement {
    private WebElement  element;
    private String      calleeMethod;
    private String      tascase;
    private Logger      logger;

    public WebElem(WebElement elem) {
        element = elem;
        Throwable t = new Throwable();
        StackTraceElement[] elements = t.getStackTrace();
        calleeMethod = elements[1].getMethodName();
        tascase = elements[2].getClassName();

    }

    @Override
    public void click() {
        logger = Logger.getLogger(tascase);
        if (IsElementPresent() == true) {
            if (element.isEnabled() == false) {
                logger.info("element "   calleeMethod   " is disabled.");
            } else {
                element.click();
                logger.info("clicked: "   calleeMethod);
            }
        } else {
            logger.error("element "   calleeMethod   " is not found.");
        }

    }

    public void sendKeys(String string) {
        logger = Logger.getLogger(tascase);
        if (IsElementPresent() == true) {
        }
        if (element.isEnabled() == false) {
            logger.error("element "   calleeMethod   " is disabled.");
        } else {
            element.sendKeys(string);
            logger.info("Sending keys: "   string   " to: "   calleeMethod);
        }
    }

    public void clear() {
        element.clear();
    }

    private boolean IsElementPresent() {
        if (element != null) {
            return true;
        } else {
            return false;
        }
    }

}
  

и в отчете есть необходимые значения:

 Sending keys: 200006862315 to: fldAccountIdFrom
clicked: btnInvoice
clicked: btnResource