2016-11-04 5 views
0

通常のSelenium APIメソッドでは機能しない難しい選択では問題があります。だから、私はJavascriptエグゼキュータを使用する必要があります。私はこれまでのところ、ドロップダウンからオプションを正しく選択することができません=どこからですか?どのような目的地ですか?Javascript Executorを使用してSelectタグから選択する

以下のコードでは、[検索]をクリックするとページが更新されるようです。おそらく、JSに渡されたCSSセレクターが間違っていますか?

テスト中のWebサイトは、次のとおりです。https://club18-30.com/club18-30

private String whereFromText = "LGW" 
private String whereToText = "IBZ" 

    public void setDepartureAirport(String whereFromText) 
    selectOption(whereFromText); 
} 

    public void setDestinationAirport(String whereToText) { 
    selectOption(whereToText); 
} 

    public void submitSearchRequest() throws InterruptedException { 
    By searchButtonLocator = By.xpath(searchButtonLocatorPath); 
    click(searchButtonLocator); 

    By searchResultsLocator = By.xpath(searchResultsLocatorPath); 
    waitForIsDisplayed(searchResultsLocator, 180); 
} 


public void selectOption(String option) { 
    String script = 
      "function selectOption(s) {\r\n" + 
        " var sel = document.querySelector('.custom-select-options');\r\n" + 
        " for (var i = 0; i < sel.options.length; i++)\r\n" + 
        " {\r\n" + 
        "  if (sel.options[i].text.indexOf(s) > -1)\r\n" + 
        "  {\r\n" + 
        "   sel.options[i].selected = true;\r\n" + 
        "   break;\r\n" + 
        "  }\r\n" + 
        " }\r\n" + 
        "}\r\n" + 
        "return selectOption('" + option + "');"; 

    javaScriptExecutor(script); 
} 
+0

アプリケーションが資格情報を要求しています。信用証明書を提供したり、HTMLを教えてください。 – Buaban

+0

@Buaban - クレデンシャルはありませんか?資格情報がどこにも表示されません – Steerpike

+0

資格情報を保存することができます。また、マシンが同じドメインにあるため、自動的に認証される可能性があります。 – Buaban

答えて

0

あなたのJavaScriptがCssSelector式を除いて、ほぼ正しいです。行き先空港は".destinationAirport .custom-select"、到着空港は".arrivalAirport .custom-select"である必要があります。しかし、私はjsで試してみましたが、アプリはsubmitボタンをクリックするとエラーを表示します。 GUI上で値をクリックして選択する必要があるかもしれません。以下のコードを参照してください。

String destination = "Glasgow - Scotland (GLA) United Kingdom"; 
String arrival = "Ibiza - Balearic Islands (IBZ) Spain"; 
driver.findElement(By.cssSelector(".destinationAirport .custom-select")).click(); 
driver.findElement(By.xpath("//*[contains(@class,'destinationAirport')]//li[text()='" + destination + "']")).click(); 
driver.findElement(By.cssSelector(".arrivalAirport .custom-select")).click(); 
driver.findElement(By.xpath("//*[contains(@class,'arrivalAirport')]//li[text()='" + arrival + "']")).click(); 
driver.findElement(By.cssSelector(".searchButton")).click(); 
+0

を更新しました。返信ありがとうございます。残念なことに、このページは、選択された後に目的地の空港に反映されるように見え、したがってスクリプトは失敗します。他に何をしようかわからない! – Steerpike

+0

@Steerpikeこのスクリプトは、自分のマシン(jdk8、chrome)でうまく動作します。どのブラウザを使用していますか? – Buaban

+0

最新のクロムとFirefoxを試してみましたが、Java 8を使ってページを更新しても検索できません。 – Steerpike

関連する問題