![](/img/trans.png)
[英]How to handle the static dropdowns of PASSENGERS field of https://www.spicejet.com/ using Selenium Java
[英]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(); } }
瀏覽器快照:
導致此異常的因素有很多,我建議您嘗試等待。
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();
當您輸入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() );
}
為了在 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.