C# 无法使用selenium按ID获取元素

C# 无法使用selenium按ID获取元素,c#,selenium,C#,Selenium,这是我的页面: <table class="formarea" border="0" cellspacing="0" cellpadding="0" width="100%"> <tbody> <tr> <td class="form_label_40"> <script>prints(ot_login_username);</script>Username&nbsp;

这是我的页面:

<table class="formarea" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
    <tr>
        <td class="form_label_40">
            <script>prints(ot_login_username);</script>Username&nbsp;:</td>
        <!--<td></td>-->
        <td>
            <input type="text" maxlength="16" size="12" id="login_name">
            </td>
        </tr>
        <tr>
            <td class="form_label_40">
                <b>
                    <script>prints(ot_login_password);</script>Password&nbsp;:</b>
            </td>
            <td>
                <input type="password" maxlength="16" size="12" id="login_pass">&nbsp;&nbsp;
                    <!--<script>prints("<input type='button' value='"+ot_login_login+"' onclick='checkForm();'>");</script>-->

                </td>
            </tr>
但是我得到了一个错误:OpenQA.Selenium.NoSuchElementException:“没有这样的元素”
为什么?

根据您共享的
HTML
,您已尝试通过
id
查找元素登录名登录密码,该id未唯一标识元素。要唯一地识别目标,您必须采用
定位策略
,如下所示:

//login_name field
driver.FindElement(By.XPath("//table[@class='formarea']//input[@id='login_name']"))
//login_pass field
driver.FindElement(By.XPath("//table[@class='formarea']//input[@id='login_pass']"))

我认为您的问题在于selenium中的以下代码:
driver.FindElement(By.Id(“pass\u name”)
,但在html中,您要查找的Id是:
,即登录\u pass

如果我错了,请纠正我


顺便说一句,如果我理解正确,X-Path很容易受到代码更改的影响://

尝试使用一些等待隐式等待或显式等待
//login_name field
driver.FindElement(By.XPath("//table[@class='formarea']//input[@id='login_name']"))
//login_pass field
driver.FindElement(By.XPath("//table[@class='formarea']//input[@id='login_pass']"))