无法找到CSS选择元素(Unable to find element with css select

2019-09-22 06:48发布

使用硒的webdriver对于FF / IE使用C#(.NET)

下面是我的页面的源代码,我试图用CssSelector找到/载有我的网页的特定名称和我有下面的代码尝试,但导致的错误,任何帮助吗?

//码

driver.FindElement(By.CssSelector("td:contains('John John')"))

//错误:

e {"Unable to find element with css selector == td:contains('John John')"}  System.Exception {OpenQA.Selenium.NoSuchElementException}

//我的html代码:

 <div id="ctl00_ContentPlaceHolder1_AddeCardControl1_gv_ctl01_RecordCount" style="float:right; padding-right:10px; margin-top:3px;">
  <b>308</b> Items Found
 </div>
 </td>
</tr>
<tr class="item">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$0')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>John John</td>
 <td>&nbsp;</td>
 <td>&nbsp;</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 11:15:08 PM</td>
</tr>
<tr class="altItem">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$1')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>John Schulz</td>
 <td>&nbsp;</td>
 <td>Visitors</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 6:28:29 PM</td>
</tr>
<tr class="item">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$2')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>Parker Smith</td>
 <td>&nbsp;</td>
 <td>Visitors</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 6:01:28 PM</td>
</tr>
<tr class="altItem">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$3')">Edit</a></td>
 <td align="center" style="width:15px;"></td>
 <td>Test 123</td>
 <td>&nbsp;</td>
 <td>Visitors</td>
 <td>&nbsp;</td>
 <td><img src="check.png" alt='Active' style='display: ;' /></td>
 <td>9/7/2012 1:36:45 PM</td>
</tr>
<tr class="item">
 <td align="center"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$gv','Select$4')">Edit</a></td>
 <td align="center" style="width:15px;">

Answer 1:

你可以试试这个

var webElements = (Driver.FindElements(By.XPath(elementXpath))).ToList();
webElements.FindIndex(item  => item.Text.Contains("John John").Click()

其中“elementXpath”为路径,以每个单元表的“名字”。 所以,你得到的名称列表,然后就找到一个匹配。 你会得到你的项目点击。



Answer 2:

的:含有pseudoselector不是W3C CSS选择器标准的一部分。 因此,浏览器不支持选择使用它的元素。 一些JavaScript CSS选择引擎(灒,由jQuery的使用,例如发动机)提供:包含pseudoselector,但它的存在可以不可靠。

如果你必须在元素的文本内容找到一个元素,你在这一点上唯一的解决办法是使用XPath。 如何找到这在你的情况A(性能极差)的例子是如下:

IWebElement element = driver.FindElement(By.XPath("//td[contains(., 'John John')"));

需要注意的是一个更好的解决方案将永远有你自动为您需要找到正确的元素ID的应用程序。 你应该用文本,以查找元素只能作为最后的手段。



Answer 3:

您可以使用JavaScript执行单击元素有更好的运气。 我使用的是很慢的IE9 64位模拟器,似乎点击某些按钮的唯一方法是使用JavaScript执行。



Answer 4:

CSS选择器是不是很有用在这里,因为CSS选择器的HTML结构,即类型,关系和网络元素的属性工作; 他们不上的HTML内容,在这种情况下是内部的文本内容“约翰·约翰”很好地工作。

但是,XPath的将这份工作的工作。 你需要的功能是text()返回该元素的内部文本内容:

//td[text()='John John']

所以,你的代码的webdriver应该是这样的:

driver.FindElement(By.xpath("//td[text()='John John']"));

PS所有定位器验证使用Firepath在Firefox。



Answer 5:

您可以使用下面的代码:

driver.FindElement(By.XPath("//td[contains(text(), 'John John')"));


文章来源: Unable to find element with css selector