2016-07-15 7 views
1

私はテーブルの168個の入力フィールドに値を入れなければならない、多くのテストを行っています。この時点で、私はこのようなステートメントのために使用しています:Selenium WebDriver:多くの入力で値を高速に設定する

for (int i = 1; i < numberOfValues + 1; i++) { 
    try { 
     findingElement.byXPath(".//*[@id='TDCON']/tbody/tr[" + i + "]/td[4]/span/span[2]/span/span/input").sendKeys(Keys.chord(Keys.CONTROL, "a"), value); 
    }catch (NoSuchElementException ex) { 
      break; 
    } 
} 

それは次のように40回のテストを実行するために年齢を取りました。 Selenium WebDriverを使用する方法はありますか?

+0

CssSelectorが高速になる場合があります。アプリケーションのHTMLとURLを表示できますか? – Buaban

+0

申し訳ありませんが、私はアプリケーションに関する他の情報を共有することはできません。 – user3904604

答えて

2

実行時間は実行されたコマンドの数に比例します。それを減らすために、1回の呼び出しですべての要素を選択できます。もう一つの方法はJavascriptの作品を注入し、直接使う.valueプロパティを割り当てることであろう

List<WebElement> elements = driver.findElements(By.cssSelector(
    "#TDCON > tbody > tr > td:nth-child(4) > span > span:nth-child(2) > span > span > input")); 

for (int i = 0; i < numberOfValues; i++) { 
    try { 
     elements[i].sendKeys(Keys.chord(Keys.CONTROL, "a"), value); 
    }catch (NoSuchElementException ex) { 
      break; 
    } 
} 

を:それが可能だときにも、CSSセレクタではなく、XPathを使用する必要があります

((JavascriptExecutor)driver).executeScript(
    "var cells = arguments[0].querySelectorAll('#TDCON > tbody > tr > td:nth-child(4)'); " + 
    "var values = arguments[1]; " + 
    "for(var i = 0; i < values.length; ++i) { " + 
    " cells[i].querySelector('span > span:nth-child(2) > span > span > input').value = values[i]; " + 
    "} " 
    , findElement, values); 

しかし、そうではないかもしれません入力がページによって動的に処理される場合は機能します。

+0

ありがとうございます、最初のオプションはよく見えます。私ができるようになると、私はそれを試みます。 – user3904604

関連する問題