无法在中选择出发日期https://spicejet.com 通过Selenium和Java
我试图从日历中选择截至2018年10月31日的“出发日期”,但我收到错误“未知错误:元素在点(832,242)处不可单击。其他元素将收到单击:…”请帮助我。下面是我遇到这种异常的代码:无法在中选择出发日期https://spicejet.com 通过Selenium和Java,java,selenium,selenium-webdriver,xpath,webdriverwait,Java,Selenium,Selenium Webdriver,Xpath,Webdriverwait,我试图从日历中选择截至2018年10月31日的“出发日期”,但我收到错误“未知错误:元素在点(832,242)处不可单击。其他元素将收到单击:…”请帮助我。下面是我遇到这种异常的代码: public class bookflight extends Thread { UtilityMethods utilObj= new UtilityMethods(); @Test public void SighnUp() throws IOException {
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();
}
}
导致这种例外的因素很多, 我想建议你试着等一下
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();
从(如古瓦哈蒂(高卢))中选择,至(如果阿(高卢))目的地和出发日期在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(); } }
- 浏览器快照:
您可以根据异常类型按操作类单击元素:
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
以基于年/月/日期
选择日期。更多
var path=“//div[contains(@class,'ui-datepicker-group-first')]//td[@data-month='9'和@data-year='2018']]/a[.=31];
var elem=document.evaluate(path,window.document,null,9,null);
控制台日志(elem);
元素单击();
当您输入
FROM
和TO
数据时,则出发日期
字段自动选中。因此,只需使用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;
导入io.github.yash777.driver.Drivers;
导入io.github.yash777.driver.WebDriverException;
公共级喷气式飞机{
静态网络驱动程序;
静态WebDriverWait显式;
公共静态void main(字符串[]args)引发WebDriverException,IOException{
test();
}
public static void test()引发WebDriverException,IOException{
驱动程序=新驱动程序();
String driverPath=drivers.getDriverPath(Browser.CHROME,63,“”);
System.setProperty(ChromeDriverService.CHROME\u DRIVER\u EXE\u属性,driverPath);
DesiredCapabilities=DesiredCapabilities.chrome();
驱动程序=新的色度驱动程序(功能);
explicitWait=新的WebDriverWait(驱动程序,10);
//最大化浏览器窗口
driver.manage().window().maximize();
//转到要导航的URL
驱动程序。获取(“https://spicejet.com/");
单击元素(//输入[@id='ctl00\u mainContent\u ddl\u originStation1\u CTXT'][1]”;
单击元素(//div[@id='ctl00\u mainContent\u ddl\u originStation1\u CTNR']//a[@text='Guwahati(GAU)');
单击元素(//输入[@id='ctl00\u mainContent\u ddl\u destinationStation1\u CTXT'][1]”;
单击元素(//div[@id='ctl00\u main content\u ddl\u destinationStation1\u CTNR']//a[@text='Goa(GOI)');
单击UsingJavaScript(//div[contains(@class,'ui-datepicker-group-first')]//a[contains(@class,'ui-state-active'))”;
}
}
publicstaticvoidclickelement(字符串定位器){
By findBy=By.xpath(定位器);
WebElement=explicitWait.until(ExpectedConditions.ElementToBickable(findBy));
元素。单击();
}
公共静态无效单击使用JavaScript(字符串定位器){
StringBuffer单击=新建StringBuffer();
单击.append(“var elem=document.evaluate(\”“+locator+”\”,window.document,null,9,null)。singleNodeValue;”;
单击.append(“elem.click();”);
System.out.println(“JavaScript点击”);
jse.executeScript(click.toString());
}
用于在Java使用的运行时自动管理Selenium驱动程序可执行文件
注意:如果您选择的是自动选择的出发日期,则selenium会引发异常
线程“main”org.openqa.selenium.WebDriverException中的异常:未知错误:
元素
在点(784241)处不可单击。其他元素将收到单击:…
我希望下面的代码有助于处理出发和返回日期
公共类SpicejetDropdowns1{
公共静态void main(字符串[]args)引发InterruptedException
{System.setProperty(“webdriver.chrome.driver”,“E:\\ChromeDriver\\ChromeDriver 2.46\\ChromeDriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“http://www.spicejet.com/");
driver.manage().window().maximize();
System.out.println(driver.getTitle());driver.findelelement(By.cssSelector(“#ctl00_main content_rbtnl_Trip_1”)。单击();
//起源
findelelement(By.xpath(“./*[@id='ctl00\u mainContent\u ddl\u originStation1\u CTXT']”)。单击();
driver.findElement(由.cssSelector(“a[value='DEL']”)创建)。单击();
//目的地
driver.findelelement(By.xpath(“./*[@id='ctl00\u mainContent\u ddl\u destinationStation1\u CTXT']”)。单击();
findElement(By.xpath((//a[@value='HYD'])[2]”);
Thread.sleep(3000);driver.findelelement(By.xpath(//input[@id='ctl00\u mainContent\u view\u date1'])。单击();
if(driver.findElement(By.id(“Div1”)).getAttribute(“style”).contains(“1”))
{
System.out.println(“其已启用”);
Assert.assertTrue(true);
}
其他的
{
Assert.assertTrue(false);
}
而(!driver.findelelement(By.cssSelector(“div[class='ui-datepicker-title'][class='ui-datepicker-month'])).getText()包含(“十月”))
{
//findElement(By.xpath(“//span[contains(text(),'Next')]”)。单击();
driver.findElement(By.xpath(“//a[@class='ui-datepicker-next ui-corner all']]/span[@class='ui-icon-ui-icon-circle-triangle-e'])。单击();
System.out.println(driver.findElement(By.cssSelector(“div[class='ui-datepicker-title']][class='ui-datepicker-month'])).getText();
}
列表日期=driver.findElements(By.xpath(//table[@class='ui-datepicker-calendar']//tr//td”);
int count=dates.size();
对于(int i=0;i@RohanKerry您的XPath错误//*[@id='ui-datepicker-div