Selenium C#-通过ID动态查找元素(ID名称未知)

时间:2019-03-26 11:20:33

标签: c# html selenium

我正在尝试查找ID名称已更改的元素(并且我不确定将其更改为什么),因此我需要动态地查找它。当前代码是:

[FindsBy(How = How.Id, Using = "address.surname")]
public IWebElement AddressLastname_Input { get; set; }

public void AddressEnter_function(IWebDriver D, DataRow UserDetail)
 {
   log.sendkeylog(AddressLastname_Input, 
   UserDetail["LastName"].ToString(), 
   "Enter LastName Address Section", drv: D);
 }

相应的HTML:

<div class="form-group">
   <label class="control-label " for="address.surname">
        Last name<span>&nbsp;<font color="red">*</font></span>
   </label>         
    <input id="address.surname" name="lastName" class="form-control form- 
    control" required="required" type="text" value="">
</div>

我得到的错误是“无法通过ID查找元素”。是否有一种方法可以在不知道特定ID名称/文本的情况下找到它?

2 个答案:

答案 0 :(得分:-1)

不看HTML标记很难回答,但是如果ID和名称不断变化,也许您可​​以尝试通过CSS或什至更好的XPath来定位它?

事实证明,XPath对我而言更可靠,尽管速度稍慢。

WebDriver.FindElement(By.XPath("//input[@class='login']")).Click();

在您的代码中,form-control类应该给您一个提示,以便您也许想运行一个xpath来搜索类型为type-control并可以选择检查值的input类型的元素?

答案 1 :(得分:-1)

这个要求对我来说100%毫无意义。如果找不到该元素,是偶然出现在iFrame还是模态上?

id是否正在更改?如果是这样,您可以尝试:

    //div[@class='form-group']/input[@name='lastName']
     or
    //label[@for='address.surname']/following-sibling::input