简体   繁体   English

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

[英]Unable to select depart date in https://spicejet.com through Selenium and Java

I am trying to select a "Depart date" as of 31st october 2018 from the calender https://spicejet.com/ But I am getting error "unknown error: Element is not clickable at point (832, 242). Other element would receive the click: ..." Please help me out.我正在尝试从日历https://spicejet.com/ 中选择截至 2018 年 10 月 31 日的“出发日期”但我收到错误“未知错误:元素在点 (832, 242) 处不可点击。其他元素会收到点击:...”请帮帮我。 Here is my code getting such exception:这是我的代码得到这样的异常:

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();           
    }
}

To select From (eg Guwahati(GAU) ), To (eg Goa(GOI) ) destination and DEPART DATE as 31/10 within the url https://spicejet.com/ you need to induce WebDriverWait for the desired element to be clickable and you can use the following solution:要在url https://spicejet.com/选择From (eg Guwahati(GAU) )、 To (eg Goa(GOI) ) 目的地和DEPART DATE作为31/10 ,您需要诱导WebDriverWait以使所需元素可点击您可以使用以下解决方案:

  • Code Block:代码块:

     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(); } }
  • Browser Snapshot:浏览器快照:

spicejet_depart_date_31oct2018.png

There is lots of different factors which results into this exception, i like to suggest you to try putting some wait.导致此异常的因素有很多,我建议您尝试等待。

WebDriverWait wait = new WebDriverWait(utilObj.getdriver(), 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("ctl00_mainContent_ddl_originStation1_CTXT")));

then try clicking element,然后尝试单击元素,

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

You can click on element by Action class, based on Exception type:您可以根据异常类型按 Action 类单击元素:

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

Updated answer to click next date.更新了点击下一个日期的答案。

//div[contains(@class, 'ui-datepicker-group-first')]//td[@data-month='9' and @data-year='2018']/a[.=31]

You can modify the above XPATH to select date based on YEAR/MONTH/DATE .您可以修改上面的XPATH以根据YEAR/MONTH/DATE选择日期。 for more XPath creation go-through my answers .更多XPath creation go-through my answers

var path ="//div[contains(@class, 'ui-datepicker-group-first')]//td[@data-month='9' and @data-year='2018']/a[.=31]";
var elem = document.evaluate(path, window.document, null, 9, null ).singleNodeValue;
console.log( elem );
elem.click();

When you enter FROM and TO data, then DEPART DATE field get auto selected.当您输入FROMTO数据时, DEPART DATE字段将被自动选中。 So, just you need to select the first data using javascript.因此,您只需要使用 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')]

sample test program.示例测试程序。

import io.github.yash777.driver.Browser;
import io.github.yash777.driver.Drivers;
import io.github.yash777.driver.WebDriverException;

public class SpiceJET {
    static WebDriver driver;
    static WebDriverWait explicitWait;
    public static void main(String[] args) throws WebDriverException, IOException {
        test();
    }
    public static void test() throws WebDriverException, IOException {
        Drivers drivers = new Drivers();
        String driverPath = drivers.getDriverPath(Browser.CHROME, 63, "");

        System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, driverPath);

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        driver = new ChromeDriver( capabilities );
        explicitWait = new WebDriverWait(driver, 10);

        //Maximize browser window
        driver.manage().window().maximize();
        //Go to URL which you want to navigate
        driver.get("https://spicejet.com/");

        clickElement("//input[@id='ctl00_mainContent_ddl_originStation1_CTXT'][1]");
        clickElement("//div[@id='ctl00_mainContent_ddl_originStation1_CTNR']//a[@text='Guwahati (GAU)']");
        clickElement("//input[@id='ctl00_mainContent_ddl_destinationStation1_CTXT'][1]");
        clickElement("//div[@id='ctl00_mainContent_ddl_destinationStation1_CTNR']//a[@text='Goa (GOI)']");

        clickUsingJavaScript("//div[contains(@class, 'ui-datepicker-group-first')]//a[contains(@class, 'ui-state-active')]");
    }
}
public static void clickElement(String locator) {
    By findBy = By.xpath( locator );
    WebElement element = explicitWait.until(ExpectedConditions.elementToBeClickable( findBy ));
    element.click();
}

public static void clickUsingJavaScript( String locator ) {
    StringBuffer click = new StringBuffer();
    click.append("var elem = document.evaluate(\""+locator+"\", window.document, null, 9, null ).singleNodeValue;");
    click.append("elem.click();");
    System.out.println("JavaScript Click.");
    jse.executeScript( click.toString() );
}

For Automatic management of Selenium Driver Executable's in run-time for Java use SeleniumWebDrivers为了在 Java 运行时自动管理 Selenium 驱动程序可执行文件,请使用SeleniumWebDrivers

NOTE: If you are selecting DEPART DATE which got auto selected then selenium throws exception注意:如果您选择了自动选择的DEPART DATE ,则 selenium 会抛出异常

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Element <input type="text" readonly="readonly" id="ctl00_mainContent_view_date2" class="custom_date_pic required home-date-pick"> is not clickable at point (784, 241).线程“main” org.openqa.selenium.WebDriverException 中的异常:未知错误:元素<input type="text" readonly="readonly" id="ctl00_mainContent_view_date2" class="custom_date_pic required home-date-pick">不可点击在点 (784, 241)。 Other element would receive the click: <span class="ui-datepicker-month">...</span>其他元素会收到点击: <span class="ui-datepicker-month">...</span>

I hope below code is helpful and handle departure and return date我希望下面的代码有帮助,并处理出发和返回日期

 public class SpicejetDropdowns1 { public static void main(String[] args) throws InterruptedException { System.setProperty("webdriver.chrome.driver","E:\\\\ChromeDriver\\\\ChromeDriver2.46\\\\chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.get("http://www.spicejet.com/"); driver.manage().window().maximize(); System.out.println(driver.getTitle()); driver.findElement(By.cssSelector("#ctl00_mainContent_rbtnl_Trip_1")).click(); // OriginStation driver.findElement(By.xpath(".//*[@id='ctl00_mainContent_ddl_originStation1_CTXT']")).click(); driver.findElement(By.cssSelector("a[value='DEL']")).click(); // Destination driver.findElement(By.xpath(".//*[@id='ctl00_mainContent_ddl_destinationStation1_CTXT']")).click(); driver.findElement(By.xpath("(//a[@value='HYD'])[2]")).click(); Thread.sleep(3000); driver.findElement(By.xpath("//input[@id='ctl00_mainContent_view_date1']")).click(); if(driver.findElement(By.id("Div1")).getAttribute("style").contains("1")) { System.out.println("its enabled"); Assert.assertTrue(true); } else { Assert.assertTrue(false); } while(!driver.findElement(By.cssSelector("div[class='ui-datepicker-title'] [class='ui-datepicker-month']")).getText().contains("October")) { // driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click(); driver.findElement(By.xpath("//a[@class='ui-datepicker-next ui-corner-all']/span[@class='ui-icon ui-icon-circle-triangle-e']")).click(); System.out.println(driver.findElement(By.cssSelector("div[class='ui-datepicker-title'] [class='ui-datepicker-month']")).getText()); } List<WebElement> dates= driver.findElements(By.xpath("//table[@class='ui-datepicker-calendar']//tr//td")); int count= dates.size(); for(int i=0; i<count; i++) { String txt = driver.findElements(By.xpath("//table[@class='ui-datepicker-calendar']//tr//td")).get(i).getText(); if(txt.equalsIgnoreCase("28")) { driver.findElements(By.xpath("//table[@class='ui-datepicker-calendar']//tr//td")).get(i).click(); System.out.println(txt); break; } } // Return Date Selection Thread.sleep(3000); driver.findElement(By.xpath("//input[@id='ctl00_mainContent_view_date2']")).click(); while(!driver.findElement(By.cssSelector("div[class='ui-datepicker-title'] [class='ui-datepicker-month']")).getText().contains("October")) { // driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click(); driver.findElement(By.xpath("//a[@class='ui-datepicker-next ui-corner-all']/span[@class='ui-icon ui-icon-circle-triangle-e']")).click(); System.out.println(driver.findElement(By.cssSelector("div[class='ui-datepicker-title'] [class='ui-datepicker-month']")).getText()); } List<WebElement> MDates= driver.findElements(By.xpath("//table[@class='ui-datepicker-calendar']//tr//td")); int Mcount= dates.size(); for(int i=0; i<Mcount; i++) { String txt = driver.findElements(By.xpath("//table[@class='ui-datepicker-calendar']//tr//td")).get(i).getText(); if(txt.equalsIgnoreCase("31")) { driver.findElements(By.xpath("//table[@class='ui-datepicker-calendar']//tr//td")).get(i).click(); System.out.println(txt); break; } } //Select Passengers Thread.sleep(4000); driver.findElement(By.xpath(".//*[@id='divpaxinfo']")).click(); Thread.sleep(4000); WebElement Adults = driver.findElement(By.xpath("//select[@id='ctl00_mainContent_ddl_Adult']")); Select adultsdrp = new Select(Adults); adultsdrp.selectByValue("2"); WebElement childs = driver.findElement(By.xpath("//select[@id='ctl00_mainContent_ddl_Child']")); Select childsdrp = new Select(childs); childsdrp.selectByValue("2"); driver.findElement(By.xpath(".//*[@id='divpaxinfo']")).click(); System.out.println(driver.findElement(By.xpath(".//*[@id='divpaxinfo']")).getText()); //Static Currency Dropdown WebElement Currency = driver.findElement(By.id("ctl00_mainContent_DropDownListCurrency")); Select currencydrp = new Select(Currency); currencydrp.selectByValue("USD"); Assert.assertEquals(driver.findElement(By.id("ctl00_mainContent_DropDownListCurrency")).getAttribute("value"), "USD"); System.out.println(driver.findElement(By.id("ctl00_mainContent_DropDownListCurrency")).getAttribute("value")); } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 Selenium Java 处理 https://www.spicejet.com/ 的 PASSENGERS 字段的静态下拉列表 - How to handle the static dropdowns of PASSENGERS field of https://www.spicejet.com/ using Selenium Java 如何通过 selenium-webdriver 在 url http://www.spicejet.com/ 上执行多个操作并单击带有文本的链接作为会员登录 - How to perform multiple actions and click on the link with text as Member Login on the url http://www.spicejet.com/ through selenium-webdriver Selenium Java:无法从日期选择器中选择日期 - Selenium Java: Unable to Select Date from Date Picker 如何在 https://www.goibibo.com/hotels 上点击 SELECT ROOM 按钮 - How to click on SELECT ROOM button on https://www.goibibo.com/hotels using Selenium and Java 无法通过Selenium和Java在Make My Trip网站中找到返回日期日历中的任何日期 - Unable to locate any date from return date calendar in Make My Trip website through selenium and Java How to select the autocomplete result that contains a certain phrase within the website https://www.easyjet.com/en using Selenium and Java - How to select the autocomplete result that contains a certain phrase within the website https://www.easyjet.com/en using Selenium and Java 无法在Java Selenium中选择Bootstrap下拉列表 - Unable to select Bootstrap dropdown in Java Selenium 无法从Selenium和Java中的索引下拉列表中选择 - Unable to Select From Dropdown By Index in Selenium and Java 无法使用Java中的Selenium WebDriver选择按钮 - Unable to select a button using Selenium WebDriver in Java 如何在 Origin.com 中使用 selenium Z93F725A07423321C889DB44 select 登录按钮 - How to select the Sign In button in Origin.com using selenium java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM