[英]Selenium C# - Find element by Id dynamically (Id name unknown)
[英]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.