Лучшее и простое решение вашей проблемы было бы, если бы вы могли дать кнопкам разные имена.
Помните: name
компонента отличается от text
, которое он отображает! Все ваши кнопки могут отображать «текст» для пользователей, но при этом иметь такие имена, как «кнопка1», «кнопка2», «кнопка3».
В этом случае вы можете написать
frame.button(JButtonMatcher.withName("button1").withText("text").andShowing()).click();
Следующей возможностью было бы дать панелям, содержащим кнопки, разные имена, например, «панель1», «панель2», «панель3».
Если вы можете реализовать это, вы можете написать
frame.panel("panel1").button(JButtonMatcher.withText("text").andShowing()).click();
Последней и худшей возможностью было бы написать свои собственные GenericTypeMatcher
/ NamedComponentMatcherTemplate
, которые возвращают только n
кнопку, соответствующую заданному тексту.
ВНИМАНИЕ:
- это крайняя мера, если все другие подходы терпят неудачу
- Это приведет к хрупким испытаниям
- Вы не хотите делать это, если нет абсолютно никакого другого пути!
С этими предупреждениями это код:
public class MyJButtonMatcher extends NamedComponentMatcherTemplate<JButton> {
private String text;
private int index;
public MyJButtonMatcher(String text, int index) {
super(JButton.class);
this.text = text;
this.index = index;
requireShowing(true);
}
@Override
protected boolean isMatching(JButton button) {
if (isNameMatching(button.getName()) && arePropertyValuesMatching(text, button.getText())) {
return index-- == 0;
} else {
return false;
}
}
}
person
Thomas Kläger
schedule
09.06.2018