Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在中选择出发日期https://spicejet.com 通过Selenium和Java_Java_Selenium_Selenium Webdriver_Xpath_Webdriverwait - Fatal编程技术网

无法在中选择出发日期https://spicejet.com 通过Selenium和Java

无法在中选择出发日期https://spicejet.com 通过Selenium和Java,java,selenium,selenium-webdriver,xpath,webdriverwait,Java,Selenium,Selenium Webdriver,Xpath,Webdriverwait,我试图从日历中选择截至2018年10月31日的“出发日期”,但我收到错误“未知错误:元素在点(832,242)处不可单击。其他元素将收到单击:…”请帮助我。下面是我遇到这种异常的代码: public class bookflight extends Thread { UtilityMethods utilObj= new UtilityMethods(); @Test public void SighnUp() throws IOException {

我试图从日历中选择截至2018年10月31日的“出发日期”,但我收到错误“未知错误:元素在点(832,242)处不可单击。其他元素将收到单击:…”请帮助我。下面是我遇到这种异常的代码:

public class bookflight extends Thread {

    UtilityMethods utilObj= new UtilityMethods();
    @Test
    public void SighnUp() throws IOException
    {
        utilObj.getdriver().get("https://spicejet.com");
        utilObj.getdriver().manage().window().maximize();

        utilObj.getdriver().findElement(By.id("ctl00_mainContent_ddl_originStation1_CTXT")).click();
        utilObj.getdriver().findElement(By.xpath("//a[contains(text(),'Guwahati (GAU)')]")).click();
        utilObj.getdriver().findElement(By.xpath("//a[contains(text(),'Goa (GOI)')]")).click();
        utilObj.getdriver().findElement(By.className("ui-datepicker-trigger")).click();
        utilObj.getdriver().findElement(By.xpath("//div[@class='ui-datepicker-group ui-datepicker-group-first'])/parent:://table[@class='ui-datepicker-calendar']following-sibling::./a/contains(text(),'31')")).click();           
    }
}

导致这种例外的因素很多, 我想建议你试着等一下

WebDriverWait wait = new WebDriverWait(utilObj.getdriver(), 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("ctl00_mainContent_ddl_originStation1_CTXT")));
然后尝试单击元素

utilObj.getdriver().findElement(By.id("ctl00_mainContent_ddl_originStation1_CTXT")).click();

从(如古瓦哈蒂(高卢))中选择(如果阿(高卢))目的地和出发日期在url
https://spicejet.com/
您需要引导WebDriverWait使所需元素可单击,并且您可以使用以下解决方案:

  • 代码块:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class spicejet_login {
    
        public static void main(String[] args) {
    
    
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver = new FirefoxDriver();
            driver.get("https://spicejet.com");
            new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='ctl00_mainContent_ddl_originStation1_CTXT']"))).click();
            driver.findElement(By.xpath("//div[@id='glsctl00_mainContent_ddl_originStation1_CTNR']//table[@id='citydropdown']//li/a[@value='GAU']")).click();
            driver.findElement(By.xpath("//div[@id='ctl00_mainContent_ddl_destinationStation1_CTNR']//table[@id='citydropdown']//li/a[@value='GOI']")).click();
            new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//table[@class='ui-datepicker-calendar']//tr//a[contains(@class,'ui-state-default') and contains(.,'31')]"))).click();
        }
    }
    
  • 浏览器快照:


您可以根据异常类型按操作类单击元素:

Actions action = new Actions(driver);
action.moveToElement(WebElement to click).click().perform();

更新答案以单击下一个日期

//div[contains(@class, 'ui-datepicker-group-first')]//td[@data-month='9' and @data-year='2018']/a[.=31]
您可以修改上面的
XPATH
以基于
年/月/日期
选择日期。更多

var path=“//div[contains(@class,'ui-datepicker-group-first')]//td[@data-month='9'和@data-year='2018']]/a[.=31];
var elem=document.evaluate(path,window.document,null,9,null);
控制台日志(elem);
元素单击();

当您输入
FROM
TO
数据时,则
出发日期
字段自动选中。因此,只需使用javascript选择第一个数据

FROM « //div[@id='ctl00_mainContent_ddl_originStation1_CTNR']//a[@text='Guwahati (GAU)']
TO « //div[@id='ctl00_mainContent_ddl_destinationStation1_CTNR']//a[@text='Goa (GOI)']
DEPART DATE «
//div[contains(@class, 'ui-datepicker-group-first')]//a[contains(@class, 'ui-state-active')]
样本测试程序

import io.github.yash777.driver.Browser;
导入io.github.yash777.driver.Drivers;
导入io.github.yash777.driver.WebDriverException;
公共级喷气式飞机{
静态网络驱动程序;
静态WebDriverWait显式;
公共静态void main(字符串[]args)引发WebDriverException,IOException{
test();
}
public static void test()引发WebDriverException,IOException{
驱动程序=新驱动程序();
String driverPath=drivers.getDriverPath(Browser.CHROME,63,“”);
System.setProperty(ChromeDriverService.CHROME\u DRIVER\u EXE\u属性,driverPath);
DesiredCapabilities=DesiredCapabilities.chrome();
驱动程序=新的色度驱动程序(功能);
explicitWait=新的WebDriverWait(驱动程序,10);
//最大化浏览器窗口
driver.manage().window().maximize();
//转到要导航的URL
驱动程序。获取(“https://spicejet.com/");
单击元素(//输入[@id='ctl00\u mainContent\u ddl\u originStation1\u CTXT'][1]”;
单击元素(//div[@id='ctl00\u mainContent\u ddl\u originStation1\u CTNR']//a[@text='Guwahati(GAU)');
单击元素(//输入[@id='ctl00\u mainContent\u ddl\u destinationStation1\u CTXT'][1]”;
单击元素(//div[@id='ctl00\u main content\u ddl\u destinationStation1\u CTNR']//a[@text='Goa(GOI)');
单击UsingJavaScript(//div[contains(@class,'ui-datepicker-group-first')]//a[contains(@class,'ui-state-active'))”;
}
}
publicstaticvoidclickelement(字符串定位器){
By findBy=By.xpath(定位器);
WebElement=explicitWait.until(ExpectedConditions.ElementToBickable(findBy));
元素。单击();
}
公共静态无效单击使用JavaScript(字符串定位器){
StringBuffer单击=新建StringBuffer();
单击.append(“var elem=document.evaluate(\”“+locator+”\”,window.document,null,9,null)。singleNodeValue;”;
单击.append(“elem.click();”);
System.out.println(“JavaScript点击”);
jse.executeScript(click.toString());
}
用于在Java使用的运行时自动管理Selenium驱动程序可执行文件

注意:如果您选择的是自动选择的出发日期,则selenium会引发异常

线程“main”org.openqa.selenium.WebDriverException中的异常:未知错误: 元素
在点(784241)处不可单击。其他元素将收到单击:


我希望下面的代码有助于处理出发和返回日期

公共类SpicejetDropdowns1{
公共静态void main(字符串[]args)引发InterruptedException
{System.setProperty(“webdriver.chrome.driver”,“E:\\ChromeDriver\\ChromeDriver 2.46\\ChromeDriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“http://www.spicejet.com/");
driver.manage().window().maximize();
System.out.println(driver.getTitle());driver.findelelement(By.cssSelector(“#ctl00_main content_rbtnl_Trip_1”)。单击();
//起源
findelelement(By.xpath(“./*[@id='ctl00\u mainContent\u ddl\u originStation1\u CTXT']”)。单击();
driver.findElement(由.cssSelector(“a[value='DEL']”)创建)。单击();
//目的地
driver.findelelement(By.xpath(“./*[@id='ctl00\u mainContent\u ddl\u destinationStation1\u CTXT']”)。单击();
findElement(By.xpath((//a[@value='HYD'])[2]”);
Thread.sleep(3000);driver.findelelement(By.xpath(//input[@id='ctl00\u mainContent\u view\u date1'])。单击();
if(driver.findElement(By.id(“Div1”)).getAttribute(“style”).contains(“1”))
{
System.out.println(“其已启用”);
Assert.assertTrue(true);
}
其他的
{
Assert.assertTrue(false);
}
而(!driver.findelelement(By.cssSelector(“div[class='ui-datepicker-title'][class='ui-datepicker-month'])).getText()包含(“十月”))
{
//findElement(By.xpath(“//span[contains(text(),'Next')]”)。单击();
driver.findElement(By.xpath(“//a[@class='ui-datepicker-next ui-corner all']]/span[@class='ui-icon-ui-icon-circle-triangle-e'])。单击();
System.out.println(driver.findElement(By.cssSelector(“div[class='ui-datepicker-title']][class='ui-datepicker-month'])).getText();
}
列表日期=driver.findElements(By.xpath(//table[@class='ui-datepicker-calendar']//tr//td”);
int count=dates.size();

对于(int i=0;i@RohanKerry您的XPath错误//*[@id='ui-datepicker-div