寻找用于硒测试的CSS选择器

时间:2015-02-12 16:51:42

标签: html css selenium

有人能告诉我如何正确找到以下代码的css选择器。我需要知道css选择器而不是xpath,因为web元素不能使用xpath。

<div id="drag" class="dojoDndSource dojoDndTarget dojoDndContainer" style="height:300px;width:250px;font-size:1.2em;border:2px solid #ccc; padding:1em;overflow:auto; " data-dojo-type="dojo.dnd.Source">
<div id="1" class="dojoDndItem" style="padding:.5em;">1</div>
<div id="2" class="dojoDndItem" style="padding:.5em;">2</div>
<div id="3" class="dojoDndItem dojoDndItemAnchor" style="padding:.5em;">3</div>
<div id="99" class="dojoDndItem" style="padding:.5em;">T4</div>
<div id="100" class="dojoDndItem" style="padding:.5em;">T5</div>  

我希望用id="99"选择div。我尝试过使用以下内容:

driver.findElement(By.cssSelector(".T4"));
driver.findElement(By.cssSelector("//input[@id='gbqfq']")); 

3 个答案:

答案 0 :(得分:1)

您用于查找相关元素的代码都是错误的,如下所述:

1 - driver.findElement(By.cssSelector(".T4"));
因为哟你已经把“。”在“T4”之前,它将搜索具有T4类的元素,该元素不存在“T4”,实际上是您想要找到的元素的 innerHTML / text

<强> 2 - driver.findElement(By.cssSelector("//input[@id='gbqfq']"));
正如 @BoltClock 所评论的那样,这实际上是您尝试使用cssSelector方法的 xpath。

您可以使用下面的代码使用xpath定位元素,而不是

driver.findElement(By.xpath("//div[.='T4']"));

这会将 div元素与精确的innerHTML / text定位为'T4'。

此外,您还可以使用'id',前提是它是唯一的,并且不会动态更改,如下所示:

1 - driver.findElement(By.xpath("//div[@id='99']"));
这将找到id为'99'的div元素。

2 - driver.findElement(By.id("99"));
这将找到ID为“99”的元素。

第3 - driver.findElement(By.cssSelector("div[id='99']"));
这也会找到id为'99'的div元素。

答案 1 :(得分:0)

您正在使用XPath选择器By.cssSelector()这是错误的,并且在.表示类,您尝试传递文本。您无法在此momenet上使用css选择器执行基于文本的搜索。在这种情况下,XPath是最佳选择。

如果您想使用nth-child()

cssSelector可让您找到带索引的子元素。见this

//css walk thorugh with index
.dojoDndItem:nth-child(1)

但是,我希望在这种情况下xpath基于文本的搜索

//div[.='1']
//div[.='T4']

...等

答案 2 :(得分:0)

您可以直接使用driver.findElement(By.id("99"));,或者如果您想使用css选择器,请使用下面的选项。你应该使用#,如果你试图通过id和.,如果你按类名获得它。 Id选择器是最快的,所以尽量使用id选择器。

driver.findElement(By.cssSelector(&#34;#99&#34));