2012-02-20 2 views
0

私は最も安い便を検索するために使用されるウェブサイト上でセレンを使ってウォークスルーを試みています。私はすべての検索プロセスを順調に実行することができましたが、今は飛行選択に悩まされています。私は会社名でフライトを注文することができます。そして今、2つの最初のフライト(出発、到着)をクリックする必要があります。Selenium - 自動ランダム生成DIV/ID/LINKをクリックしてください

添付の画像からわかるように、Webページは2つのテーブルを生成します。それぞれにはいくつかのフライトが掲載されています。私は各テーブルの最初のものをクリックしてはいけません。

問題は、生成されたリストが異なる企業で異なるDIV IDを使用し、IDに乱数(「_X」、Xは乱数)があることです。

各テーブルのDIVをクリックするだけで、すべての欄が作成する必要があります。しかし、すべての列は(両方の表で)同じ名前を使用します。

現在、航空便、料金、時間は常に更新されており、毎回異なるIDを意味するウェブページが毎回異なる結果を表示するため、わずか数時間の間、セレンIDEを使用しています。

これを解決する方法はありますか?

重要:私は、SeleniumでJAVAを使用しています。 PERL、PYTHONまたは他のものなし。

これは今JAVAを使用して階段のようになります。

// This orders the departure flight by company. 
selenium.click("id=orden-compania-ida"); 
selenium.click("id=orden-compania-ida"); 

// This orders the arrival flights by company. 
selenium.click("id=orden-compania-vuelta"); 
selenium.click("id=orden-compania-vuelta"); 

// This would click on the first link of first table 
selenium.click("css=div.col-3 > label"); 
selenium.click("id=I_5"); 

// This would click on the first link of the second table 
selenium.click("css=#TV_GDSAMADEUS_7 > div.col-3 > label"); 
selenium.click("id=V_12"); 

この時点で、これは動作しますが、フライトの更新後、これはもう動作しません。セレンが常に各テーブルの最初のフライトをクリックするようにする方法はありますか?

ありがとうございます。

LINK TO IMAGE

答えて

0

私の意見では、代わりにIDのものを使用してのCSSセレクタによって必要なdiv要素を選択してみてください。私が正確に何を意味しているのかを理解するために、次のコードの平和を守ってください。

// Open Firefox driver. 
    WebDriver driver = new FirefoxDriver(); 

    // Send a get request. 
    driver.get("http://google.com"); 

    // Typing a search query. 
    WebElement searchField = driver.findElement(By.name("q")); 
    searchField.sendKeys("Cheese!"); 

    // Waiting for the driver to change its title and load search results. 
    new WebDriverWait(driver, 20).until(new ExpectedCondition<Boolean>() { 
     public Boolean apply(WebDriver d) { 
      return d.getTitle().toLowerCase().contains("cheese"); 
     } 
    }); 

    // Obtain dymamically loaded search results. 
    List<WebElement> results = driver.findElements(By.cssSelector("h3.r")); 

    // Go through the search results 
    for (WebElement element : results) { 
     // You can click instead of printing. 
     System.out.println(element.getText()); 
    } 

    // Close the driver. 
    driver.close(); 

edited example from the Official Selenium siteです。

+0

問題は、Webdriverではなく、Selenium RCを使用していることです。 「driver.findElements」はサポートされていません... –

関連する問題