单击使用Selenium在IRCTC上不可见的按钮

时间:2017-05-17 07:43:54

标签: java selenium-webdriver

Irctc上的book now按钮无法点击。 显示的错误是元素不可交互。 我尝试使用

wait.until(ExpectedConditions.elementToBeClickable(By.xpath("")));

但仍然没有收获。

FirefoxOptions options = new FirefoxOptions();
options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //This is the location where you have installed Firefox on your machine

WebDriver driver = new FirefoxDriver(options);

WebDriverWait wait = new WebDriverWait(driver, 10);

driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);

driver.get("http://www.irctc.co.in");//It will open the website

driver.manage().window().maximize();//It will maximize the window

Thread.sleep(5000);//For Entering the Captcha before 5sec

driver.findElement(By.xpath("//input[@id='usernameId']")).sendKeys("");//enter username

driver.findElement(By.xpath("//input[@class='loginPassword']")).sendKeys("");//enter password

driver.findElement(By.xpath("//input[@id='loginbutton']")).click();//clicks on sign in

Thread.sleep(2000);

driver.findElement(By.xpath("//input[@id='jpform:fromStation']")).sendKeys("H NIZAMUDDIN - NZM");//origin station


driver.findElement(By.xpath("//input[@id='jpform:toStation']")).sendKeys("KOTA JN - KOTA");//destination station


driver.findElement(By.xpath("//input[@id='jpform:journeyDateInputDate']")).sendKeys("18-05-2017");//Date Of Journey

Thread.sleep(2000);

driver.findElement(By.xpath("//input[@id='jpform:jpsubmit']")).click();//Clicks to find the trains

Thread.sleep(2000);

driver.findElement(By.xpath("//a[@id='cllink-13237-CC-1']")).click();//Clicks the class of train to find available seats

Thread.sleep(5000);

driver.findElement(By.xpath("//a[@id='13237-3A-GN-0']")).click();//For clicking on Book Now, but is not functioning.

1 个答案:

答案 0 :(得分:0)

注意: 我不鼓励IRCTC的自动化。这只是为了指导OP朝着正确的方向发展。使用风险自负。

我正在使用ChromeDriver,您可以使用任何驱动程序,但请确保它支持Javascript。这是代码

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;

class Main{
    public static void main(String args[])throws InterruptedException{
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Shash\\Desktop\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("window-size=1024,768");

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        WebDriver driver = new ChromeDriver(capabilities);

        driver.get("http://www.irctc.co.in");//It will open the website
        Thread.sleep(5000);//For Entering the Captcha before 5sec

        driver.findElement(By.xpath("//input[@id='usernameId']")).sendKeys("");//enter username

        driver.findElement(By.xpath("//input[@class='loginPassword']")).sendKeys("");//enter password

        driver.findElement(By.xpath("//input[@id='loginbutton']")).click();//clicks on sign in

        Thread.sleep(2000);

        driver.findElement(By.xpath("//input[@id='jpform:fromStation']")).sendKeys("H NIZAMUDDIN - NZM");//origin station


        driver.findElement(By.xpath("//input[@id='jpform:toStation']")).sendKeys("KOTA JN - KOTA");//destination station


        driver.findElement(By.xpath("//input[@id='jpform:journeyDateInputDate']")).sendKeys("18-05-2017");//Date Of Journey

        driver.findElement(By.xpath("//input[@id='jpform:jpsubmit']")).click();//Clicks to find the trains
        driver.findElement(By.xpath("//a[@id='cllink-12060-CC-0']")).click();//Clicks the class of train to find available seats
        Thread.sleep(3000);
        if (driver instanceof JavascriptExecutor) {
            ((JavascriptExecutor) driver)
                .executeScript("document.getElementById(\"12060-CC-GN-0\").click()");
        }
    }
}

您的代码有几个问题。首先,ID cllink-13237-CC-1的元素不存在。确保您获得元素的确切ID。由于IRCTC不允许右键单击,您可以使用 Ctrl + Shift + I 查看来源。

其次,隐藏了Book Now元素,因此我使用Javascript点击它。