2017-09-07 45 views
0

我試圖在面板(或表格,我不確定)的頁面上找到元素。使用ID或名稱時,無法找到它。我正在嘗試使用XPath查找元素,但遇到問題。 Firebug不再受支持,我無法使用Firefox開發工具(複製XPath)找到它。我曾嘗試添加等待例外和切換幀。我曾嘗試下面的代碼:Selenium C#找不到使用Id,Name或XPath的元素

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

這導致

"Message: OpenQA.Selenium.InvalidSelectorException : Given xpath expression "//td(@contains='FirstName'))" is invalid: SyntaxError: The expression is not a legal expression."

當我使用檢查元素網頁上的輸出是這樣的:對於

<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> 

我搜索解決方案但我仍然空着。

+0

如果您從年底.SendKeys()你還得到一個錯誤? – NiallJG

+0

您是否嘗試過使用'web.FindElement(By.Id(「ContentPlaceHolder1_ASPxRoundPane14_txtFirstName」)'?好像這是一個名字值的文本輸入框。 – Brydenr

+0

嗯,因爲這不是一個合法的表達式,這就是爲什麼你是 – IamBatman

回答

1

由於是塊級元素,所以不能設置<td>元素的「文本」。

您需要設置輸入的文本。

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

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

這個CSS選擇器(英文):

Find me a <td> , and immediately proceeding that element, find me an input, that has an id that ends with "txtFirstName"

你可以看到,沒有太多去,但txtFirstNameid屬性看起來非常獨特。

如果你想更簡單(記住,K.I.S.S;))

只使用

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

Upvoted for the」KISS「statement。LOL – IamBatman

+0

THANK YOU !!!!!! This work。I can quit我的頭靠在牆上,XPath和CssSelector對我來說是新的,我真的很感謝你的幫助, – StarKill3r

+0

很高興聽到它的效果,並且你可以從頭痛中解脫出來,繼續點擊這個問題作爲答案。 「選中標記」在向上和向下的投票圖標下面 – sircapsalot

0

試試這個XPath:

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

我很確定你需要在答案中留下更多信息。 – IamBatman

+0

這仍然返回「消息:OpenQA。Selenium.NoSuchElementException:無法找到元素:// td [contains(text(),'FirstName')]「 – StarKill3r

1

正如我在評論說,你的表達是錯誤的。你不能@包含。 @是元素中的屬性。所以你想只抓住ID的特定部分看起來像「名字」。你將需要使用「contains()」,並且在括號內是你想要抓取的屬性的位置。現在你正在談論它的方式,你說的是「平等」,你沒有指定一個屬性。所以如果你使用了一個屬性,那麼「equals」不會起作用,因爲「equals」需要「整個」屬性只與「名字」屬性相同,這在你的「ID」屬性中並不是這樣,因爲它不僅僅只是「 「名字」。爲了搜索屬性,您需要執行以下操作。

相關問題