首页 > 解决方案 > 如何单击 Spicejet 网站中的 RoundTrip 单选按钮。它被选中,但几秒钟后,单向被选为默认值

问题描述

如何单击SpiceJet网站内的往返单选按钮。它被选中,但几秒钟后,单向被选为默认值

以下是 2020 年 11 月 11 日自动化 spicejet 网站的代码。即使我单击往返单选按钮,默认情况下单向单选按钮也会被选中。我该如何解决这个问题?

package practice;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Spicejet {

    public static void main(String[] args) throws InterruptedException {

        System.setProperty("webdriver.chrome.driver",
                "C:\\Users\\User\\Desktop\\selenium\\chromedriver_win32 (1)\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.spicejet.com/");
        driver.manage().window().maximize();
        driver.findElement(By.xpath("//input[@value='RoundTrip']")).click();
        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='MAA']"))
                .click();
        driver.findElement(By.xpath(
                "//div[@id='ctl00_mainContent_ddl_destinationStation1_CTNR']//table[@id='citydropdown']//li/a[@value='BLR']"))
                .click();
        driver.close();
    }
}

标签: javaselenium-webdriverxpathcss-selectorswebdriverwait

解决方案


似乎SpiceJet web 应用程序需要更长的时间才能document.readyState达到complete.

因此,click()在与文本Round Trip相关联的上,您需要诱导WebDriverWait并且您可以使用以下任一Locator StrategieselementToBeClickable()

  • cssSelector

    new WebDriverWait(driver, 30).until(webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("table.tblTrip input[value='RoundTrip']"))).click();
    
  • xpath

    new WebDriverWait(driver, 30).until(webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//table[@class='tblTrip']//input[@value='RoundTrip']"))).click();
    
  • 浏览器快照:

Spicejet_RoundTrip


参考

您可以在以下位置找到一些相关的详细讨论:


推荐阅读