Java 如何使用Selenium Webriver处理一个月和一年都保存在同一html标记中的日期选择器?
我想创建一个方法,该方法接受以下格式的字符串变量“2018年4月1日”。然后拆分该字符串,并使用日期“配料”在选择器中选择日期。我已经介绍了选择日期和单击箭头更改“月-年”对。我也知道如何到达用户插入的年份,但我不确定如何在到达年份时选择正确的月份。下面是我到目前为止想出的代码Java 如何使用Selenium Webriver处理一个月和一年都保存在同一html标记中的日期选择器?,java,selenium,selenium-webdriver,datepicker,logic,Java,Selenium,Selenium Webdriver,Datepicker,Logic,我想创建一个方法,该方法接受以下格式的字符串变量“2018年4月1日”。然后拆分该字符串,并使用日期“配料”在选择器中选择日期。我已经介绍了选择日期和单击箭头更改“月-年”对。我也知道如何到达用户插入的年份,但我不确定如何在到达年份时选择正确的月份。下面是我到目前为止想出的代码 public void pickTheDate() { String date = "10 April 2018"; String[] dateElements = date.split(" ");
public void pickTheDate() {
String date = "10 April 2018";
String[] dateElements = date.split(" ");
WebElement nextMonth = driver.findElement(By.xpath("somexpath"));
WebElement previousMonth = driver.findElement(By.xpath("somexpath1"));
String dayFromUserInput = dateElements[0];
String monthFromUserInput = dateElements[1];
String yearFromUserInput = dateElements[2];
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement datePickerHeader= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("somexpath")));
String textFromDatePickerHeader = datePickerHeader.getText();
让我们假设日期选择器标题中的日期为“2017年10月”
String[] dateElementsFromDatePickerHeader = textFromDatePickerHeader.split(" ");
int yearDiff = Integer.parseInt(yearFromUserInput) - Integer.parseInt(dateElementsFromDatePickerHeader[1]);
if (yearDiff != 0) {
//moving to next year
if (yearDiff > 0) {
for (int i = 0; i < yearDiff; i++) {
nextMonth.click();
}
String[]dateElementsFromDatePickerHeader=textFromDatePickerHeader.split(“”);
int yearDiff=Integer.parseInt(yearFromUserInput)-Integer.parseInt(dateElementsFromDatePickerHeader[1]);
如果(年差!=0){
//移到明年
如果(年差>0){
对于(int i=0;i
此时,我知道我到达的月份是“2018年1月”
}
//moving to previous year
else if (yearDiff < 0) {
for (int i = 0; i < (yearDiff * (-1)); i++) {
previousMonth.click();
}
}
}
}
}
//移到上一年
否则如果(年差<0){
对于(int i=0;i<(yearDiff*(-1));i++){
上个月。单击();
}
}
}
}
如果我要在2016年内搜索日期,我知道遇到的第一个月是“2016年12月”。
请告知我如何将导航的正确逻辑合并到用户插入的月份。提前感谢。这取决于你选择约会对象的行为。以下日期选择器的结构仅供参考: 如果单击“2017年10月”标题,则会打开月份供选择,如下图所示: 再次点击“2017”标题,然后打开年份供选择 因此,这里将介绍自动化测试用例
public void enterFromDate(String fromDate) throws InterruptedException
{
// Split the data and store it in string array
String[] data = fromDate.split(" ");
// click datepicker icon
fromDateCalenderIcon.click();
// Click date picker header, It moves to month list
calenderHeader.click();
// Again click date picker header, It now moves to Year listing
calenderHeader.click();
mainloop: while(true)
{
//Iterate all year
for(int i=0;i<datePickerData.size();i++)
{
// check weather year available in list if yes then select it
if(datePickerData.get(i).getText().trim().contains(data[2]))
{
datePickerData.get(i).click();
break mainloop;
}
}
// else click back arrow
datePickerLeftArrow.click();
}
// Iterate month list
for(WebElement e: datePickerData)
{
// If months available then click on it
if(e.getText().equals(data[1]))
{
e.click();
break;
}
}
// Iterate Date and select as required
for(WebElement e: datePickerData)
{
if((e.getText().equals(data[0]) && (e.findElement(By.tagName("span"))).getAttribute("class").equals("ng-binding")))
{
e.click();
break;
}
}
}
public void enterFromDate(String fromDate)引发中断异常
{
//拆分数据并将其存储在字符串数组中
字符串[]数据=fromDate.split(“”);
//单击日期选择器图标
FromDateCalender图标。单击();
//单击日期选择器标题,它将移动到月份列表
压延头。单击();
//再次单击日期选择器标题,它现在移动到年份列表
压延头。单击();
主循环:while(true)
{
//全年迭代
对于(int i=0;i