gpt4 book ai didi

java - 为日期选择器获取 ElementNotVisibleException : Using Selenium WebDriver in MakeMyTrip. com

转载 作者:行者123 更新时间:2023-11-30 10:49:08 25 4
gpt4 key购买 nike

我想单击 makemytip.com 中的特定日期。我写了下面的代码。一切正常。除了我无法选择日期。我可以导航到我想要的月份,但无法选择日期。提前感谢您的帮助。

当我运行下面的程序时,出现以下错误

线程“main”中的异常 org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互

package com;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Calendar_MMT {
static WebDriver d;
public static void main(String[] args) throws ParseException {
d = new FirefoxDriver();
d.manage().window().maximize();
d.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
d.get("http://makemytrip.com");
d.findElement(By.xpath("//*[@id='start_date_sec']/span[1]/span[1]")).click();
selectDate("02/03/2016");
}


public static void selectDate(String date) throws ParseException{
SimpleDateFormat df=new SimpleDateFormat("dd/MM/yyyy");
Date dateToBeSelected = df.parse(date);
Date currentDate = new Date();
String monthYearDisplayed = d.findElement(By.xpath("//*[@id='ui-datepicker-div']/div[1]/div/div")).getText();
System.out.println(monthYearDisplayed);

String month = new SimpleDateFormat("MMMM").format(dateToBeSelected);
String year = new SimpleDateFormat("yyyy").format(dateToBeSelected);
String day = new SimpleDateFormat("d").format(dateToBeSelected);
String monthYearToBeSelected = month+" "+year;
System.out.println(monthYearToBeSelected);

while(true){
if(monthYearToBeSelected.equals(monthYearDisplayed)){

// I FEEL BELOW LINE HAS PROBLEM
d.findElement(By.xpath("//a[text()='"+day+"']")).click();
System.out.println("Found and Selected");
break;

}else{ //navigate to correct month and year
if(dateToBeSelected.after(currentDate)){
d.findElement(By.xpath("//*[@id='ui-datepicker-div']/div[2]/div/a/span")).click();
}else{
d.findElement(By.xpath("//*[@id='ui-datepicker-div']/div[1]/div/a/span")).click();
}

}
monthYearDisplayed = d.findElement(By.xpath("//*[@id='ui-datepicker-div']/div[1]/div/div")).getText();
}
}
}

最佳答案

WebElement.click() 不起作用,因为出于某种原因 WebDriver 认为 Web 元素不可见。要验证这一点,您可以执行:

WebElement dayElement = d.findElement(By.xpath("//a[text()='" + day + "']"));
System.out.println("isDisplayed: " + dayElement.isDisplayed()); //this will always print false

要绕过可见性检查,您可以通过 javascript 执行点击:

WebElement dayElement = d.findElement(By.xpath("//a[text()='" + day + "']"));
JavascriptExecutor js = (JavascriptExecutor) d;
js.executeScript("arguments[0].click();", dayElement);

关于java - 为日期选择器获取 ElementNotVisibleException : Using Selenium WebDriver in MakeMyTrip. com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35535444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com