从硒中的JavaScriptExecutor中选择日历日期
Selecting calendar date from JavaScriptExecutor in selenium
我正在尝试从硒中的 JavaScriptExecutor select 日历日期,但日期没有得到 selected,控制台也没有为此给出任何错误。我无法理解这背后的原因。谁能帮忙。下面是我写的selenium代码。
package SeleniumSessions;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class SelectCalendarByJS {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","F:\Drivers\chromedriver_win32\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("https://www.makemytrip.com/");
//WebElement date = driver.findElement(By.xpath("//div[@class = 'fsw_inputBox dates inactiveWidget ']"));
WebElement date = driver.findElement(By.xpath("//input[@id = 'departure']"));
String dateVal = "Friday, 19 Jun 2020";
selectDateByJS(driver, date, dateVal);
//driver.quit();
}
public static void selectDateByJS(WebDriver driver , WebElement element , String dateVal) {
JavascriptExecutor js = ((JavascriptExecutor)driver);
js.executeScript("arguments[0].setAttribute('value','"+dateVal+"');", element);
}
}
下面是我正在 selecting 的属性 HTML DOM。
<input data-cy="departure" id="departure" type="text" class="fsw_inputField font20" readonly="" value="Friday, 19 Jun 2020">
makemytrip 出发日期选择器元素的问题是您无法将钥匙发送给它。您的代码适用于 Expedia 应用程序,您可以在其中更改文本字段的值属性,这将起作用。但在 makemytrip 的情况下,您必须单击该元素,然后您必须单击日期,如以下代码所示。如果您将看到日期选择发生在一个元素中,并且它在另一个元素中显示所选日期(如果您将看到 P 标签,那么您将意识到它在 P 标签中而不是在相同的元素)。
@Test
public void test() throws InterruptedException {
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
WebElement date = driver.findElement(By.xpath("//*[@id=\"root\"]/div/div[2]/div/div/div[2]/div[1]/div[3]"));
date.click();
// System.out.println(driver.findElement(By.xpath()));
Thread.sleep(3000);
String dateVal = "Tue Jun 16 2020";
selectDateByJS(driver, dateVal);
Thread.sleep(3000);
}
public static void selectDateByJS(WebDriver driver, String dateVal) {
JavascriptExecutor js = ((JavascriptExecutor)driver);
js.executeScript("arguments[0].click();", driver.findElement(By.xpath("//div[@class='DayPicker-Day' and @aria-label='"+dateVal+ "']")));
}
我正在尝试从硒中的 JavaScriptExecutor select 日历日期,但日期没有得到 selected,控制台也没有为此给出任何错误。我无法理解这背后的原因。谁能帮忙。下面是我写的selenium代码。
package SeleniumSessions;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class SelectCalendarByJS {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","F:\Drivers\chromedriver_win32\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("https://www.makemytrip.com/");
//WebElement date = driver.findElement(By.xpath("//div[@class = 'fsw_inputBox dates inactiveWidget ']"));
WebElement date = driver.findElement(By.xpath("//input[@id = 'departure']"));
String dateVal = "Friday, 19 Jun 2020";
selectDateByJS(driver, date, dateVal);
//driver.quit();
}
public static void selectDateByJS(WebDriver driver , WebElement element , String dateVal) {
JavascriptExecutor js = ((JavascriptExecutor)driver);
js.executeScript("arguments[0].setAttribute('value','"+dateVal+"');", element);
}
}
下面是我正在 selecting 的属性 HTML DOM。
<input data-cy="departure" id="departure" type="text" class="fsw_inputField font20" readonly="" value="Friday, 19 Jun 2020">
makemytrip 出发日期选择器元素的问题是您无法将钥匙发送给它。您的代码适用于 Expedia 应用程序,您可以在其中更改文本字段的值属性,这将起作用。但在 makemytrip 的情况下,您必须单击该元素,然后您必须单击日期,如以下代码所示。如果您将看到日期选择发生在一个元素中,并且它在另一个元素中显示所选日期(如果您将看到 P 标签,那么您将意识到它在 P 标签中而不是在相同的元素)。
@Test
public void test() throws InterruptedException {
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
WebElement date = driver.findElement(By.xpath("//*[@id=\"root\"]/div/div[2]/div/div/div[2]/div[1]/div[3]"));
date.click();
// System.out.println(driver.findElement(By.xpath()));
Thread.sleep(3000);
String dateVal = "Tue Jun 16 2020";
selectDateByJS(driver, dateVal);
Thread.sleep(3000);
}
public static void selectDateByJS(WebDriver driver, String dateVal) {
JavascriptExecutor js = ((JavascriptExecutor)driver);
js.executeScript("arguments[0].click();", driver.findElement(By.xpath("//div[@class='DayPicker-Day' and @aria-label='"+dateVal+ "']")));
}