我正在尝试将变量放入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类中放入变量的日期。
不好意思,请问我。
答案 0 :(得分:0)
@FindBy不允许您在运行时进行计算。作为注释,它会在脚本开始之前运行。
在这种情况下这无济于事,但将来可能会派上用场。关键是在您的字符串上使用final
标签。因此,必须为其分配一些东西。
public final String cMonday= "button.datepicker-cal-date[data-day='Monday']";
@FindBy(css = cMonday)
public WebElement dayOfWeekMonday;
作为一种习惯,我以定位符的类型开头该变量,对于CSS来说是'c',对于xpath是'x',这样我就不会感到困惑。
根据您的情况...
首先,创建所有按钮的列表:
@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();
}
代码可能需要一些调整,但是您应该了解一下。从“数据日”列表中保存的名称列表中,循环浏览直至找到正确的值,然后可以单击它。
答案 1 :(得分:-1)
我听说的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;