簡體   English   中英

Selenium C#無法使用ID,Name或XPath找到Element

[英]Selenium C# cannot find Element using Id, Name or XPath

我正在嘗試在面板(或表格,我不確定)內​​的頁面上找到一個元素。 使用ID或名稱時,無法找到它。 我現在正在嘗試使用XPath查找元素,但是遇到了麻煩。 Firebug不再受支持,我也無法使用Firefox開發工具(復制XPath)找到它。 我嘗試添加等待異常和切換幀。 我嘗試了以下代碼:

web.FindElement(By.XPath("//td(@contains='FirstName'))")).SendKeys("Sarah");

這導致

“消息:OpenQA.Selenium.InvalidSelectorException:給定的xpath表達式“ // td(@ contains ='FirstName'))”無效:SyntaxError:該表達式不是合法表達式。

當我在網頁上使用Inspect Element時,輸出為:

<tr>
  <td>First Name:</td>
  <td>
   <input id="ContentPlaceHolder1_ASPxRoundPane14_txtFirstName" name="ctl00$ContentPlaceHolder1$ASPxRoundPanel4$txtFirstName" type="text">
   <br>
   <span id="ContentPlaceHolder1_ASPxRoundPanel4_RequiredFieldValidator2" style="color:Red;visibility:hidden;">First Name must be entered</span>
  </td>
</tr>

我已經搜索了好幾天的解決方案,但仍然空着。

正如我在評論中所說,您的表達是錯誤的。 您不能@包含。 @是元素中的屬性。 因此,您只想獲取ID中似乎是“名字”的特定部分。 您將需要使用“ contains()”,並且在括號內是放置要獲取的屬性的位置。 現在,您要進行的操作是說“等於”,而您沒有指定屬性。 因此,如果您使用屬性,則“等於”將不起作用,因為“等於”希望“整個”屬性僅等於“名字”,而“ ID”屬性則不是這種情況,因為它不僅具有“名字”。 為了搜索屬性,您需要執行以下操作。

//input[contains(@id, 'FirstName')]

您不能設置<td>元素的“文本”,因為它是塊級元素。

您需要設置輸入文本。

您可以使用以下選擇器找到輸入:

web.FindElement(By.CssSelector("td > input[id$='txtFirstName']")).SendKeys("The First Name")

此CSS選擇器的意思是(英文):

為我找到一個<td> ,然后立即繼續該元素,為我找到一個輸入,該輸入的id ends with “ txtFirstName” ends with

您可以看到沒有太多事情txtFirstName ,但是id屬性中的txtFirstName看起來足夠唯一。

如果您想要更簡單(請記住,KISS;))

只是使用

web.FindElement(By.CssSelector("input[id$='txtFirstName']")).SendKeys("The First Name")

試試這個xpath:

`web.FindElement(By.XPath("//input[contains(@id,'FirstName')]")).SendKeys("Sarah");`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM