2017-09-07 46 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”属性中并不是这样,因为它不仅仅只是“ “名字”。为了搜索属性,您需要执行以下操作。

相关问题