我想 select 使用 selenium webdriver 脚本从弹出窗口中获取日期
I want to select a date from the popup using selenium webdriver script
我想从弹出窗口 select 20-April-2015。我正在尝试为此使用 xpath 表示法。请让我知道这是否是实现此目标的正确方法。
下面是我正在尝试的 xpath,不知道它是否正确(部分)
//td[@data-year="2015" and @data-month="3"]
上面指定的 Xpath 非常脆弱。
如果您想要 select 更改的日期,您是否总是想继续计算 tr,td 索引?
这是一个更好的选择,取决于您尝试使用的日期选择器对象,但该方法更可靠 -
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.ArrayList;
import java.util.List;
public class WhiteBoard {
public static WebDriver browser;
//Specify any date here... (Let it come in any format but break it up this way)
public static String day = "31";
public static String month = "January";
public static int year = 2010;
public static String test_URL = "http://salman-w.googlecode.com/svn/trunk/jquery-ui-datepicker/parse-and-format-dates.html";
public static String css_DatePicker = "input.hasDatepicker";
public static String css_next = "a[title='Next']";
public static String css_prev = "a[title='Prev']";
public static String css_DispYear = "span.ui-datepicker-year";
public static String css_DispMonth = "span.ui-datepicker-month";
public static String css_DispDay = "td[data-handler='selectDay']";
public static void main(String[] args){
System.setProperty("webdriver.chrome.driver", "D:\00_FX_WorkSpace\chromedriver.exe");
browser = new ChromeDriver();
browser.navigate().to(test_URL);
List<WebElement> objDate = browser.findElements(By.cssSelector(css_DatePicker));
if(objDate.size() > 0){
objDate.get(0).click();
selectDate();
}
else{
System.out.println("Not found date object...");
}
}
public static void selectDate(){
selectYear();
}
public static void selectYear(){
WebElement dispYear = browser.findElement(By.cssSelector(css_DispYear));
int iYear = Integer.parseInt(dispYear.getText());
if(iYear == year){
selectMonth();
}
else if(iYear < year){
//click next
WebElement next = browser.findElement(By.cssSelector(css_next));
next.click();
selectYear();
}
else if(iYear > year){
WebElement prev = browser.findElement(By.cssSelector(css_prev));
prev.click();
selectYear();
}
}
public static void selectMonth(){
WebElement dispMonth = browser.findElement(By.cssSelector(css_DispMonth));
String strMonth = dispMonth.getText();
List<String> arrMonths = new ArrayList<>();
arrMonths.add("January");
arrMonths.add("February");
arrMonths.add("March");
arrMonths.add("April");
arrMonths.add("May");
arrMonths.add("June");
arrMonths.add("July");
arrMonths.add("August");
arrMonths.add("September");
arrMonths.add("October");
arrMonths.add("November");
arrMonths.add("December");
int iActualPosition, iExpectedPosition;
iActualPosition = arrMonths.indexOf(strMonth);
iExpectedPosition = arrMonths.indexOf(month);
if(iActualPosition == iExpectedPosition){
selectDay();
}
else if(iActualPosition < iExpectedPosition){
//click next
WebElement next = browser.findElement(By.cssSelector(css_next));
next.click();
selectMonth();
}
else if(iActualPosition > iExpectedPosition){
WebElement prev = browser.findElement(By.cssSelector(css_prev));
prev.click();
selectMonth();
}
}
public static void selectDay(){
List<WebElement> dispDay = browser.findElements(By.cssSelector(css_DispDay));
for (WebElement dayCell : dispDay)
{
if (dayCell.getText().equals(day))
{
dayCell.click();
break;
}
}
}
}
我想从弹出窗口 select 20-April-2015。我正在尝试为此使用 xpath 表示法。请让我知道这是否是实现此目标的正确方法。
下面是我正在尝试的 xpath,不知道它是否正确(部分)
//td[@data-year="2015" and @data-month="3"]
上面指定的 Xpath 非常脆弱。 如果您想要 select 更改的日期,您是否总是想继续计算 tr,td 索引?
这是一个更好的选择,取决于您尝试使用的日期选择器对象,但该方法更可靠 -
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.ArrayList;
import java.util.List;
public class WhiteBoard {
public static WebDriver browser;
//Specify any date here... (Let it come in any format but break it up this way)
public static String day = "31";
public static String month = "January";
public static int year = 2010;
public static String test_URL = "http://salman-w.googlecode.com/svn/trunk/jquery-ui-datepicker/parse-and-format-dates.html";
public static String css_DatePicker = "input.hasDatepicker";
public static String css_next = "a[title='Next']";
public static String css_prev = "a[title='Prev']";
public static String css_DispYear = "span.ui-datepicker-year";
public static String css_DispMonth = "span.ui-datepicker-month";
public static String css_DispDay = "td[data-handler='selectDay']";
public static void main(String[] args){
System.setProperty("webdriver.chrome.driver", "D:\00_FX_WorkSpace\chromedriver.exe");
browser = new ChromeDriver();
browser.navigate().to(test_URL);
List<WebElement> objDate = browser.findElements(By.cssSelector(css_DatePicker));
if(objDate.size() > 0){
objDate.get(0).click();
selectDate();
}
else{
System.out.println("Not found date object...");
}
}
public static void selectDate(){
selectYear();
}
public static void selectYear(){
WebElement dispYear = browser.findElement(By.cssSelector(css_DispYear));
int iYear = Integer.parseInt(dispYear.getText());
if(iYear == year){
selectMonth();
}
else if(iYear < year){
//click next
WebElement next = browser.findElement(By.cssSelector(css_next));
next.click();
selectYear();
}
else if(iYear > year){
WebElement prev = browser.findElement(By.cssSelector(css_prev));
prev.click();
selectYear();
}
}
public static void selectMonth(){
WebElement dispMonth = browser.findElement(By.cssSelector(css_DispMonth));
String strMonth = dispMonth.getText();
List<String> arrMonths = new ArrayList<>();
arrMonths.add("January");
arrMonths.add("February");
arrMonths.add("March");
arrMonths.add("April");
arrMonths.add("May");
arrMonths.add("June");
arrMonths.add("July");
arrMonths.add("August");
arrMonths.add("September");
arrMonths.add("October");
arrMonths.add("November");
arrMonths.add("December");
int iActualPosition, iExpectedPosition;
iActualPosition = arrMonths.indexOf(strMonth);
iExpectedPosition = arrMonths.indexOf(month);
if(iActualPosition == iExpectedPosition){
selectDay();
}
else if(iActualPosition < iExpectedPosition){
//click next
WebElement next = browser.findElement(By.cssSelector(css_next));
next.click();
selectMonth();
}
else if(iActualPosition > iExpectedPosition){
WebElement prev = browser.findElement(By.cssSelector(css_prev));
prev.click();
selectMonth();
}
}
public static void selectDay(){
List<WebElement> dispDay = browser.findElements(By.cssSelector(css_DispDay));
for (WebElement dayCell : dispDay)
{
if (dayCell.getText().equals(day))
{
dayCell.click();
break;
}
}
}
}