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
<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 :</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 :</b>
</td>
<td>
<input type="password" maxlength="16" size="12" id="login_pass">
<!--<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']"))