我试图打开日历并点击月份。我可以设法打开日历,但我的日历的xpath没有被识别。我验证了我的xpath在chrome控制台中工作,但它只能在打开日历后验证它。有人可以帮帮我吗?谢谢!
`import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class CalendarExample {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver","C:\\Program Files\\Java\\Selenium\\Drivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.path2usa.com/travel-companions");
List<WebElement> dates = driver.findElements(By.className("day"));
String text = "";
//select August 22 from calendar
//step 1: open the calendar
driver.findElement(By.xpath("//input[@id='travel_date']")).click();
//step 2: click the month
driver.findElement(By.xpath("//body/div[4]/div[@class='datepicker-days']/table//th[@class='datepicker-switch']")).click();
}
}
答案 0 :(得分:1)
在selenium中,仅当元素在浏览器中可见时才返回元素对象。另一方面,如果元素不可见,则返回 Selenium.ElementNotVisibleException 。因此,查看您共享的问题,日历元素可能仅在其打开时创建,因此在您尝试单击日历时,您必须确保日历已打开。只有这样,元素才会被返回。
PS:关于你应该使用什么样的XPath的一个建议,请参考:https://stackoverflow.com/a/49497529/1262248
答案 1 :(得分:0)
您遇到错误,因为您尝试在DOM
中可用之前访问该元素。
因此,首先打开日历,然后在具有“日”类的访问元素之后。
无需更改xpath
。
//open calendar
driver.findElement(By.xpath("//input[@id='travel_date']")).click();
//access element with class "day"
List<WebElement> dates = driver.findElements(By.className("day"));
答案 2 :(得分:0)
当您尝试单击该元素时,该元素不可见。
在课程开始时声明:
WebDriverWait wait = new WebDriverWait(driver, 20);
然后,在单击元素之前插入:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//body/div[4]/div[@class='datepicker-days']/table//th[@class='datepicker-switch']")));
希望这有帮助。