Невозможно выбрать дату отъезда в https://spicejet.com через Selenium и Java - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь выбрать «дату отъезда» по состоянию на 31 октября 2018 года из календаря https://spicejet.com/ Но я получаю ошибку "неизвестная ошибка: элемент не активен в точке (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();           
    }
}

Ответы [ 4 ]

0 голосов
/ 29 октября 2018

Обновлен ответ, чтобы нажать следующую дату.

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

При вводе данных FROM и TO поле 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() );
}

Для автоматического управления исполняемыми файлами Selenium Driver во время выполнения для использования Java SeleniumWebDrivers

ПРИМЕЧАНИЕ: Если вы выбираете DEPART DATE, который был выбран автоматически, то селен выдает исключение

Исключение в потоке "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>

0 голосов
/ 29 октября 2018

Для выбора Из (например, Гувахати (GAU) ), До (например, Гоа (GOI) ) пункта назначения и DEPART DATE как 31/10 в пределах 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();
        }
    }
    
  • Снимок браузера:

spicejet_depart_date_31oct2018.png

0 голосов
/ 29 октября 2018

Вы можете нажать на элемент по классу Action, основываясь на типе исключения:

Actions action = new Actions(driver);
action.moveToElement(WebElement to click).click().perform();
0 голосов
/ 29 октября 2018

Есть много разных факторов, которые приводят к этому исключению, Я хотел бы предложить вам немного подождать.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...