2009-03-19 2 views
17

私はajaxベースのテキストフィールドに部分的な値を入力し、リストに期待される内容があることを確認するテストケースを持っています。表示されている場合は、コンテンツを選択します。どのようにこの作品を作るためのアイデア?セレンはオートコンプリートを処理できますか?

+0

あなたはAJAXの機能としてではなく、機能性に建てブラウザとしてオートコンプリートを意味ですか? – guerda

答えて

16

タイプコマンドでは、オートコンプリートをトリガするには不十分な場合があります。 Dave Webbの提案は他にもあります。私の唯一の追加は、typeKeysコマンドが必要な場合があり、若干異なるJavaScriptイベントが発生し、オートコンプリートウィジェットをトリガーする可能性があります。

+0

タイプとタイプキーについての良い点。 –

+1

typeとtypeKeysの両方をこの順序で使用します。 – chim

2

あなたの質問は多少曖昧です。

ほとんどのブラウザでは、フィールドの名前に基づいて値キャッシュが保持されます。これは、以前にサイトを訪れたことがない場合でも、ブラウザによって自動補完として提案されている値です。この機能はすべてのブラウザで標準ではありません。セレンがこれを検出/分析する標準的な方法はありません。あなたはまだそれを行うことができますが、自分で値を決定するjavascript関数を作成する必要があります。次に、セレンで "eval"を使ってこれらの関数を実行することができます。私はこれらの値をブラウザ間で互換性のある方法で伝えることができるjsライブラリは見ていません。

また、ajaxを使用して部分的に入力された値のサーバー側送信を行うこともできます。この場合、テキストボックスに値を入力し、期待値が上がることを主張するだけです。通常、オートコンプリート提案は、クライアント側のいくつかのレイヤーに表示されます。

+0

なぜ私の質問があいまいなのか分かりますが、私が運転していたのはあなたの答えの2番目の部分です。私の場合、ajaxベースのテキストフィールドがあり、部分的に入力された値に基づいてオプションをユーザーに提供します。セレンを使用してこれらのオプションを取得し、期待値がその中にあることを確認できますか? – Afamee

8

次のように私はこれを行うだろう:

  • typeをテキストフィールドに値を入力します。自動補完リストで
  • waitForTextPresentまたはverifyTextPresentアイテムをクリックしてオートコンプリートのコンテンツ
  • clickまたはmouseDownをチェックする

トリックは最終clickがちょうどいい場所にあること作ることになるだろう。あなたはそれを見つけることを期待しているテキストを検索するXPath式を使用できるはずです。

0

タイプの代わりにタイプキーを使用してください。 clickの代わりにmouseDownも使用してください。 正常に動作します。

1

私はそれが仕事を得るためにtypeKeysを行う前に、フィールド上のフォーカスを行うために必要ない。

+0

これは本当に本当の答えです! – Necronet

0

パトリックの答えは確かに重要ですが、私はまた、その焦点を発見し、mouseDownイベントは、jQueryのUIの最後のバージョンで必要とされます。あなたはそれが醤油研究所で稼働して見ることができるように、私はテストの映像を記録し : https://saucelabs.com/jobs/ad8c561be39bb7a42c9bb3a063214c95

3

私はIDEのシーケンス次使用、

  1. typeKeys
  2. waitForTextPresent
  3. のmouseOver
  4. clickAt

とよく反応しました

6

webdriverをについては、以下のコードが自動から自動的にテキストを検索するためである。この

を示唆してみてください。主にのリスト項目です。

driver.findElement(By.id("your searchBox")).sendKeys("your partial keyword"); 
Thread.sleep(3000); 
List <WebElement> listItems = driver.findElements(By.xpath("your list item locator")); 
listItems.get(0).click(); 
driver.findElement(By.id("your searchButton")).click(); 
+0

ありがとうございました! :-) –

+0

ありがとうございました! Thread.sleepは私が逃したものです –

+0

'locator'はどこから見つかりますか? – Siddharth

0

typeKeysにはいくつかの問題がありました。 sendKeysは最終的な解決策に見えますが、まだ実験的です。リファレンスから:

このコマンドは実験的です。将来、typeKeysコマンドを置き換える可能性があります。

keyDown、keyUp、およびkeyPressイベントを発生させようとするtypeKeysコマンドとは異なり、このコマンドはSelenium 2のアトムによってサポートされています。今後も維持される予定です。 typeKeysのヘルプテキストで

0

はそれが言うコマンド:いくつかのケースでは

、あなたはフィールドの値を設定して、「typeKeysするために単純な「タイプ」コマンドを使用する必要があるかもしれません"コマンドを使用して、入力したものに対応するキーストロークイベントを送信します。

だから、これはうまく動作しているようです

type(selector, text); 
typeKeys(selector, text); 

の組み合わせを使用しています。

1

これは誰にとってもうまくいかないかもしれませんが、私は遅延を伴う文字入力が可能なメソッドを追加しました。

Actions builder = new Actions(this.webDriver); 
    WebElement element = this.getWebElement(); 
    for (char c : value.toCharArray()) { 
     builder = builder.sendKeys(element, c + ""); 
     builder.pause(100); 
    } 

    builder.build().perform(); 

私は、コンテナがresultsElementは、結果セットと値ラベルは、私がクリックする値で含まれていWebElementである私がクリックしたい項目(

resultsElement.findElement(By.xpath("//li[.='" + valueLabel + "']")) 

を見つけました。

繰り返しますが、それはすべてのために動作しない場合がありますが、それは私のために働いたと私は共有することが賢明と思った。

0

いつかTypeKeysは動作しません。この時点で、あなたはkeyDを使用することができます自分の

入力ボックスをクリックし、ボックスにvalueとkeyDownと入力します。

0

私はこれを以下の関数を使って解くことができました: 以下の関数は、選択したいテキストをパラメータとして取ります。 例:「javascript」を選択する場合は、テキストボックスに「java」と入力してください。&は、この特定の場合は「javascript」です。

public void selectOptionWithText(String textToSelect) { 
    try { 
     //Add the below sleep if necessary 
     // Thread.sleep(1000); 

WebElement autoOptions = driver.findElement(By.className("autocomplete")); 

     List<WebElement> optionsToSelect = autoOptions().findElements(By.tagName("div")); 
     for (WebElement option : optionsToSelect) { 
      if (option.getText().equals(textToSelect)) { 
       System.out.println("Trying to select: " + textToSelect); 
       option.click(); 
       break; 
      } 
     } 
    } 
    catch(Exception e){ 
     System.out.println("Error"); 
    } 
} 
0

プラシャンスの答えを使用してほとんど変化:

/** 
* Selects the element at position idx from the autocomplete combo, considering the partialKeyword 
* @param driver 
* @param element 
* @param partialKeyword 
* @param idx 
* @throws InterruptedException 
*/ 
public static void selectAutoCompleteValue(WebDriver driver, WebElement element, String partialKeyword, Integer idx) throws InterruptedException{ 
    element.sendKeys(partialKeyword); 
    Thread.sleep(1000); 
    List <WebElement> listItems = driver.findElements(By.cssSelector(".ui-autocomplete-item.ui-autocomplete-list-item")); 
    listItems.get(idx).click(); 
} 

は、この情報がお役に立てば幸い!

0

私は オートコンプリートテキストフィールドにSelenium IDE 2.9.1バージョンでこれらのコマンドを使用しました。 のSendKeys(ロケータ、値) clickAt(ロケータ、coordString) クリック(ロケータ)

0

コードでいくつかの答えがここにあります。だから私は私の貢献をします。

私はPrimeFaces 2.2からオートコンプリートコンポーネント内のアイテムを選択するために使用しているコード:

driver.findElement(By.id(codigoBanco_input)).sendKeys("text"); 
waitForElementLocated(By.cssSelector(listItensSelector), 5); 
List<WebElement> listItems = driver.findElements(By.cssSelector(listItensSelector)); 
Actions builder = new Actions(driver); 
builder.moveToElement(listItems.get(0)).build().perform(); 
WebDriverWait wait = new WebDriverWait(driver, 5); 

wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(itemSelector))); 
     driver.findElement(By.cssSelector(itemSelector)).click(); 
関連する問題