2017-04-13 11 views
-1

これは実行しようとしていたコードですが、失敗しました。私がやりたいことは、返すカレンダーから日付を選択しようとしたときに、私は出発カレンダーから日付を選択するために同じ手順を使用しましたが、私が間違っている場所を教えてください。カレンダーの作業中に日付が選択されていない

WebDriver driver=new FirefoxDriver(); 
driver.manage().window().maximize(); 
driver.get("https://easemytrip.com/"); 
driver.findElement(By.id("FromSector")).click(); 
driver.findElement(By.xpath("//ul[@id='ulfrom']/li[text()='DEL-Delhi, 
    India']")).click(); 
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
driver.findElement(By.id("Editbox13")).click(); 
driver.findElement(By.xpath("//div[@id='toautoFill']/ul/li[text()='CCU- 
    Kolkata, India']")).click(); 
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
driver.findElement(By.id("ddate")).click(); 
driver.findElement(By.id("frth_5_21/04/2017")).click(); 
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
driver.findElement(By.xpath("//li[text()='Round Trip']")).click(); 
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
driver.findElement(By.id("rdate")).click(); 
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
driver.findElement(By.xpath("//li[@id='frth_6_22/04/2017']")).click();` 

ここではリターンカレンダーを選択するコードを示します。

<div id="rdatelbl" class="retu-date-n"> 
 
<div class="fon-txt2">RETURN (Optional) </div> 
 
<div id="divRtnCal" onclick="getTextboxName('rdate');return Fillcalendar();"> 
 
<input id="rdate" class="inpu-sec-n1 hide-ddate round-but1" type="text" readonly="" style="" placeholder="Choose Date" name="" autocomplete="off"/> 
 
</div> 
 
<input id="hdn1" type="hidden" name="hdn1"/> 
 
<input id="hdn" type="hidden" value="rdate"/> 
 
</div> 
 
<div class="clr"/> 
 
</div> 
 
</div>

これはカレンダーを返すから日付を選択するためのHTMLコードです。

<div class="days"> 
 
<ul> 
 
<li id="fiv_0_23/04/2017" class="up-date" onclick="SelectDate(this.id)" style="visibility:false"> 
 
23 
 
<span class="up-date">18465</span> 
 
</li> 
 
<li id="fiv_1_24/04/2017" class="up-date" onclick="SelectDate(this.id)" style="visibility:false"> 
 
24 
 
<span class="up-date">18465</span> 
 
</li> 
 
<li id="fiv_2_25/04/2017" class="up-date" onclick="SelectDate(this.id)" style="visibility:false"> 
 
25 
 
<span class="up-date">22094</span> 
 
</li> 
 
<li id="fiv_3_26/04/2017" class="up-date" onclick="SelectDate(this.id)" style="visibility:false"> 
 
26 
 
<span class="up-date">56332</span> 
 
</li> 
 
<li id="fiv_4_27/04/2017" class="up-date" onclick="SelectDate(this.id)" style="visibility:false"> 
 
27 
 
<span class="up-date">18551</span> 
 
</li> 
 
<li id="fiv_5_28/04/2017" class="up-date" onclick="SelectDate(this.id)" style="visibility:false"> 
 
28 
 
<span class="up-date">22169</span> 
 
</li> 
 
<li id="fiv_6_29/04/2017" class="up-date" onclick="SelectDate(this.id)" style="visibility:false"> 
 
29 
 
<span class="up-date">18550</span> 
 
</li> 
 
</ul> 
 
</div>

答えて

0

最初のものは、最初に、すべての文の後driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);を記述する必要はありません、これは最初に新しいページがロード時に一度だけ使用されます。

今すぐ次のコードを試してみてください、あなたはロードに時間がかかる要素に対して明示的な待ち時間を提供する必要があります:あなたは多くの場所で暗黙の待機条件を使用している

WebDriver driver = new FirefoxDriver(); 

driver.manage().window().maximize(); 


driver.get("https://easemytrip.com/"); 

driver.findElement(By.id("FromSector")).click(); 
WebDriverWait wait = new WebDriverWait(driver, 10); 

WebElement from = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='ulfrom']/li[2]"))); 
from.click(); 

driver.findElement(By.id("Editbox13")).click(); 

WebElement to = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='toautoFill']/ul/li[5]"))); 
to.click(); 

driver.findElement(By.id("ddate")).click(); 

WebElement fromDate = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='dvcalendar']//ul/li[contains(text(),'21')]"))); 
fromDate.click(); 
driver.findElement(By.xpath("//li[text()='Round Trip']")).click(); 
driver.findElement(By.id("rdate")).click(); 
WebElement toDate = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='dvcalendar']//ul/li[contains(text(),'24')]"))); 
toDate.click(); 
0

。一度設定すると、WebDriverオブジェクトインスタンスの存続期間まで存在するため、複数の場所で宣言する必要はありません。コードの下

試してみてください。

WebDriver driver=new FirefoxDriver(); 
    WebDriverWait wait = new WebDriverWait(driver,10); 
    driver.manage().window().maximize(); 
    driver.get("https://easemytrip.com/"); 
    driver.findElement(By.id("FromSector")).click(); 
    driver.findElement(By.xpath("//ul[@id='ulfrom']/li[text()='DEL-Delhi, India']")).click(); 
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
    driver.findElement(By.id("Editbox13")).click(); 
    driver.findElement(By.xpath("//div[@id='toautoFill']/ul/li[text()='CCU-Kolkata, India']")).click(); 
    JavascriptExecutor js = (JavascriptExecutor)driver; 

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("frth_5_21/04/2017"))); 
    js.executeScript("document.getElementById('frth_5_21/04/2017').click()"); 
    driver.findElement(By.xpath("//li[text()='Round Trip']")).click(); 
    wait.until(ExpectedConditions.elementToBeClickable(By.id("rdate"))); 
    js.executeScript("document.getElementById('rdate').click()"); 
    js.executeScript("document.getElementById('frth_6_22/04/2017').click()"); 
    driver.findElement(By.xpath("//input[@value='Search Flight']")).click(); 

それはあなた

のために働くなら、私を知ってみましょう
関連する問題