Поместите переменную в find.By CSS, но получил ошибку: «Значение атрибута должно быть константой» для Selenium / Java - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь поместить переменную в селектор CSS, но я получаю ошибку. У меня есть 3 класса: Flight (где у меня есть местоположения с моим селектором, и я получаю ошибку, код приходит отсюда) и TestCase2 (где я использую локализованный элемент для его проверки). Это код с ошибкой

    
    private String day;
    @FindBy(css = "button.datepicker-cal-date[data-day='"+ day +"']")
    private WebElement selectDay;
   
    public WebElement getSelectDay(String day){return selectDay;} 
    
    
    public void clickOnSelectDay(String day){
        System.out.println("Click on select day on the data picker");
        getSelectDay(day).click();

    }

Я хочу иметь возможность щелкнуть на конкретный день, день, когда я собираюсь вставить переменную в классе TC2.

Извините, если это что-то глупое.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

@ FindBy не позволяет выполнять вычисления во время выполнения. В качестве аннотации он запускается еще до запуска сценария.

Чтобы использовать переменную в @ FindBy

Это не поможет в этой ситуации, но может пригодиться в будущем. Ключ использует тег final на вашей строке. И поэтому ему должно быть назначено что-то.

public final String cMonday= "button.datepicker-cal-date[data-day='Monday']";
@FindBy(css = cMonday)
public WebElement dayOfWeekMonday;

Как обычно, я начинаю переменную с типа локатора, 'c' для css и 'x' для xpath, поэтому я не путаю их.

Для вашей ситуации ...

Используйте Список <> и выберите правильный способ доступа

Сначала создайте список всех кнопок:

@FindBy(css = "button.datepicker-cal-date")
private List<WebElement> dayOfTheWeekButtons;

Затем выберите нужный метод:

public void clickOnSelectDay(String day){
    for(WebElement dayName : dayOfTheWeekButtons) {
        if(day.equals(dayName.getAttribute("data-day")) {
            System.out.println("Click on select day on the data picker: " + day);
            dayName.click();
            break;
        }
    }
    fail();
}

Код может нуждаться в доработке, но вы должны понять это. Из списка имен, сохраненных в списке «день данных», пролистайте, пока не найдете правильное значение, а затем щелкните его.

0 голосов
/ 22 мая 2019

Что я слышал о FindBy и FindBys, так это о том, что они принимают только строку, которую нельзя изменить, т.е. строку final, поскольку ключевое слово final предотвращает будущие присвоения переменной. Я не уверен, но вы можете попробовать нижеуказанным способом.

private final String dayCSS1="button.datepicker-cal-date[data-day='";
private final String dayCSS2="']";
private final String day;
@FindBy(css = dayCSS1 + day + dayCSS2)
private WebElement selectDay;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...