2017-01-10 3 views
0

Я пытаюсь поймать html-форму, чтобы заполнить ее.Заполните форму html по значению с помощью C# selenium

Вот целевой источник 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

Я думаю, что это на самом деле неудачу, что не может найти эль Это так? –

+2

Вы можете попытаться использовать регулярное выражение, чтобы найти число, подобное '(?

+0

Не могли бы вы объяснить мне использование регулярного выражения для селена в более подробно? Заполнение формы - это успех, но это занимает много времени. – 8berry

ответ

2

Попытка найти элемент - дорогостоящая операция. В настоящее время вы делаете это до 100K раз и получаете исключение для всех сбоев, еще одну дорогостоящую операцию. Также могут быть цифры не в указанном диапазоне.

Я предлагаю вам найти элемент, используя его родительский элемент с уникальным идентификатором

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

Это даст вам первый <input> ребенка <div id="LoginId">

Если вы не хотите использовать индекс, искать элемент с value в name приписывать

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

Благодарим за помощь. Мне нужно больше узнать о синтаксисе CssSelector. – 8berry

Смежные вопросы