簡體   English   中英

無法通過 Selenium 和 Java 在 https://spicejet.com 中選擇出發日期

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

我正在嘗試從日歷https://spicejet.com/ 中選擇截至 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();           
    }
}

要在url https://spicejet.com/選擇From (eg Guwahati(GAU) )、 To (eg Goa(GOI) ) 目的地和DEPART DATE作為31/10 ,您需要誘導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(); } }
  • 瀏覽器快照:

spicejet_depart_date_31oct2018.png

導致此異常的因素有很多,我建議您嘗試等待。

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

您可以根據異常類型按 Action 類單擊元素:

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以根據YEAR/MONTH/DATE選擇日期。 更多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();

當您輸入FROMTO數據時, DEPART DATE字段將被自動選中。 因此,您只需要使用 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;
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() );
}

為了在 Java 運行時自動管理 Selenium 驅動程序可執行文件,請使用SeleniumWebDrivers

注意:如果您選擇了自動選擇的DEPART DATE ,則 selenium 會拋出異常

線程“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)。 其他元素會收到點擊: <span class="ui-datepicker-month">...</span>

我希望下面的代碼有幫助,並處理出發和返回日期

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM