2017-01-10 7 views
0

私はそれを記入するためにhtmlフォームをキャッチしようとします。C#seleniumでhtmlフォームを値で塗りつぶし

ここにターゲットのHTMLソースがあります。

<span class="login-id"> 
    <div id="LoginId"> 
    <input maxlength="100" name="uji.model.635939.value"> 
    <input type="hidden" name="uji.model" value="uji.model.635939"> 
    <input type="hidden" name="uji.model.635939" value="com.fujitsu.uji.compo.taglib.FieldStringUpdater;vkaiinNinshoID"> 
    </div> 
    <span class="example">(半角英数字)</span> 
</span> 

私は<input maxlength="100" name="uji.model.635939.value">に焦点を当てます。 そして毎回接続すると番号635949が変更されます。

これは私のコードです。私はforを使って複数のケースを扱いました。

for (int i = 600000; i < 699999; i++) 
{ 
    string s = i.ToString(); 
    try 
    { 
     IWebElement id = driver.FindElement(By.Name(String.Format("uji.model.{0}.value", s))); 
     id.SendKeys("******@gmail.com"); 
    } 
    catch(OpenQA.Selenium.NoSuchElementException e) 
    { 
     Console.WriteLine("exception {0}", s); 
    } 
} 

私のコードが正しいのだろうか。 (By.Name(String.Format("uji.model.{0}.value", s)が正しいとは分かりません。

BTWのmaxlength="100"は、HTMLソースの一意の表現です。 これを使用してフォームに記入する方法はありますか?読んでくれてありがとう。

+0

valueを持つ要素、私はそれが実際にそれがELEMを見つける傾けることができないと思いますそれは正しいのですか? –

+2

あなたはルーピングと見つけるのではなく、 '(?<!\ d)\ d {6}(?!\ d)'のような番号を見つけるためにregexを使うことができます –

+0

セレンの正規表現詳細は?フォームの記入は成功ですが、時間がかかります。 – 8berry

答えて

2

要素の位置を特定しようとするのは高価な操作です。現在、これを100K回まで実行しており、別の高価な操作であるすべての失敗の例外をキャッチしています。指定された範囲にない数値もあります。

私が探して、あなたがインデックスを使用しない場合はこれがあなたに<div id="LoginId">

の最初の<input>子を与える

driver.FindElement(By.CssSelector("#LoginId > input:nth-child(1)")); 

あなたは一意のIDとその親要素を使って要素を探し示唆name属性

driver.FindElement(By.CssSelector("#LoginId > input[name*='value']")); 
+0

ありがとうございます。私はCssSelector構文の詳細を知る必要があります。 – 8berry

関連する問題