使用C#selenium按值填充html表单

时间:2017-01-10 02:45:58

标签: c# html 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源代码中的唯一表达式。 有没有办法用这个填写表格?谢谢你的阅读。

1 个答案:

答案 0 :(得分:2)

尝试定位元素是一项昂贵的操作。目前,您正在执行此操作高达100K次,并捕获所有故障的异常,这是另一项昂贵的操作。也可能有数字不在指定的范围内。

我建议您使用其唯一ID

的父元素找到元素
driver.FindElement(By.CssSelector("#LoginId > input:nth-child(1)"));

这将为您提供<input>

的第一个<div id="LoginId">孩子

如果您不想使用索引,请在value属性

中查找name的元素
driver.FindElement(By.CssSelector("#LoginId > input[name*='value']"));