英文:
How to select today from html date picker instead of just putting the date there using selenuim and testng for a maven project
问题
我无法点击日历中的"今天"按钮。这是一个网站的示例:https://www.wufoo.com/html5/date-type/。<input type="date">
是我所说的日期的HTML代码。如何选择并点击日历中的"今天"按钮?
我可以发送日期值到日期输入字段,但我希望点击"今天"按钮而不是将日期作为输入发送。
这是pom.xml文件的内容:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>delete_it</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>delete_it</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.8</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>4.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
这是测试文件的内容:
package org.example;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
import java.time.LocalDate;
public class AppTest
{
public static WebDriver driver;
public LocalDate today = LocalDate.now();
@Test
public void wow() throws InterruptedException {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.wufoo.com/html5/date-type/");
Thread.sleep(0500);
driver.findElement(By.xpath("//*[@id=\"main\"]/section[1]/div/p[3]/input")).click(); // want to click the calender button. but it is clicking the text input field
}
}
英文:
I can not click the today button in calender. here is an example in this website <https://www.wufoo.com/html5/date-type/>. <input type="date">
this is the html for date i am talking about. how to select and click today button in this.
I could send the date value in the date input field. But I am expecting to click the today button instead of sending the date as input
Here is the pom.xml file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>delete_it</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>delete_it</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.8</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>4.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
This is the test file
package org.example;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
import java.time.LocalDate;
public class AppTest
{
public static WebDriver driver;
public LocalDate today = LocalDate.now();
@Test
public void wow() throws InterruptedException {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.wufoo.com/html5/date-type/");
Thread.sleep(0500);
driver.findElement(By.xpath("//*[@id=\"main\"]/section[1]/div/p[3]/input")).click(); // want to click the calender button. but it is clicking the text input field
}
}
答案1
得分: 1
请参考下面的工作代码及解释:
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.wufoo.com/html5/date-type/");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30));
// 下面的代码将接受 cookies
wait.until(ExpectedConditions.elementToBeClickable(By.id("onetrust-accept-btn-handler"))).click();
// 下面的两行代码将以 dd/MM/yyyy 格式获取下一个星期一的日期
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDateTime now = LocalDateTime.now();
String nextMonday = Objects.toString(dtf.format(now.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY)))));
// 下面的代码将下一个星期一的日期发送到日期选择器的输入框中
wait.until(ExpectedConditions.elementToBeClickable(By.name("date"))).sendKeys(nextMonday);
}
所需导入的包:
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Objects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
结果:
英文:
Refer the below working code with explanation:
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.wufoo.com/html5/date-type/");
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(30));
// below line will accept cookies
wait.until(ExpectedConditions.elementToBeClickable(By.id("onetrust-accept-btn-handler"))).click();
// below 2 lines will get the next Monday in dd/MM/yyyy format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDateTime now = LocalDateTime.now();
String nextMonday = Objects.toString(dtf.format(now.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY))));
// below line will send next Monday's date to date picker input text box
wait.until(ExpectedConditions.elementToBeClickable(By.name("date"))).sendKeys(nextMonday);
}
Required imports:
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Objects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
Result:
答案2
得分: 1
这是要翻译的内容:
这并不容易做到,因为打开的日历实际上不是 DOM 元素。
所以,作为本地点击的用户行为,你只能通过坐标模拟点击(我建议你不要这样做)。
然而,在你的情况下,你可以通过 sendKeys
将日期直接传递给输入框,这将是最简单的解决方案。
WebElement dateElement = wdwait.until(ExpectedConditions.visibilityOfElementLocated(new By.ByCssSelector("[type=date]")));
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyy");
dateElement.sendKeys(currentDate.format(formatter));
英文:
It's not easy to do, as far as opened calendar is actually not DOM element.
So 'user behaviour' as native click you can only simulate as clicking by coordinates (which I suggest you not to do).
However. you can pass date in input itself via sendKeys
, that would be easiest solution in your case.
WebElement dateElement = wdwait.until(ExpectedConditions.visibilityOfElementLocated(new By.ByCssSelector("[type=date]")));
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyy");
dateElement.sendKeys(currentDate.format(formatter));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论