#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