2016-07-06 15 views
0

私は、Selenium 2.0とJavaを使用してアプリケーションを自動化しています。 WebElementのランダムIDを生成して問題を克服し、それをクリックする方法を明確に理解したいと思います。 私はすべてが唯一の語尾が異なることをダウン私のドロップの要素のリストを持っている:私は内のランダムな変数を宣言したところ、私はランダムクラスを呼ばれたのは何250JavaでSeleniumを使用してランダムなWebElementを選択する

までように

driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_1") 
driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_2") 
driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_3") 
driver.findElement(By.id(""uxMiniFinderVoyageSelect_chzn_o_4") 

とを1

250から
Random random = new Random(); 
    int x = random.nextInt(250) + 1; 

範囲は、今、私はこのよう

private WebElement cruiseSailing = driver.findElement(By.id("uxMiniFinderVoyageSelect_chzn_o_" + x)); 
私の要素を探しています210

これはすべて問題なく、期待どおりに動作しています。私が直面している問題は、ドロップダウンからこれらの要素のいくつかを選択した後に時々エラーメッセージが表示されることです。私のテストケースによると、このエラーをキャッチし、スクリーンショットをキャプチャし、ドロップダウンから別の要素を選択する必要があります。私はcruiseSailing要素を設定したら、しかし、それは以上の同じ要素を選択し、over.Pleaseは、次のコード例を参照してください。

private WebElement cruiseSailingDropDown = driver.findElement(By.id(Some ID)); 
    private WebElement errorMessage = driver.findElement(By.xpath("some xpath expression")); 
    private WebElement cruiseSailing = driver.findElement(By.id("uxMiniFinderVoyageSelect_chzn_o_" + x)); 


    cruiseSailingDropDown.click(); 
    cruiseSailing.click(); 
    Thread.sleep(2000); 
    if(errorMessage .isDisplayed){ 
    System.out.printLn("Error message is displayed") 
    cruiseSailingDropDown.click(); 
    cruiseSailing.click(); 
    }else{ 
    proceed further to the next step 

私はcruiseSailingのwebelementのための別のIDを生成する方法を教えてください。

答えて

0

故障の場合に同じ要素を再度選択している理由は、クルーズセーリング値を新しいものに再割当てしていないためです。

  1. は、「IF」ブロック内cruiseSailingに新しい値を割り当てます。

    は私が考えることができる2つの方法があります。 "If"ブロック内で以下のようなことをすることができます。

    cruiseSailing = driver.findElement(By.id( "uxMiniFinderVoyageSelect_chzn_o_" + x));

  2. もう一度Orignialメソッドを呼び出して、cruiseSailing値を新しい値に設定します。

注:あなたは第二のアプローチで起こっている場合は、Ifブロックからの行の下に削除する場合があります。

cruiseSailingDropDown.click(); 
cruiseSailing.click(); 

スクリーンショットを撮るには、メソッドを作成してIfブロック内で呼び出すことができます。これはあなたを助けた場合、スクリーンショット

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 

// Now you can do whatever you need to do with it, for example copy somewhere 
FileUtils.copyFile(scrFile, new File("c:\\error\\screenshot.png")); 

を取るための

コードは、最大投票してください。ありがとう:)

+0

あなたの返信ありがとうございます。私は質問がありました。したがって、2番目のアプローチでは、元のメソッドを呼び出して、ifブロック内でcruiseSailingDropDown.click()およびcruiseSailing.click()を使用しないことをお勧めします。しかし、私がこのブロックから削除した場合、私のコードは単にエラーメッセージをコンソールに送り、cruiseSailing要素の新しい値を呼び出すことなくさらに進めます。あなたが提供した最初のアプローチが私のクラスにもっと多くのコードをもたらすので、2番目のアプローチをどのくらい正確に使うべきかを指定できますか? – GordonFreaman

+0

元のメソッドを呼び出すと、ここではコードのブロックがcruiseSailingに新しい値を割り当ててドロップダウンから同じコードをクリックします。私はあなたが提供しているブロックが失敗の場合に同じブロックを呼び出す方法であると仮定しています。 – Amit

+0

これは別の方法ではなく、クラス内のアクションだけです。しかし、とにかく、あなたは何とか私を助けました。ありがとう。 – GordonFreaman

関連する問題