用硒标识元素的代码

时间:2013-12-20 12:28:07

标签: selenium

当我用firebug检查元素时,它显示如下:

<a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a> 

为此,我编写了使用Xpath,Href来识别元素的代码。 但是Webdriver无法识别元素。

你们有没有人建议我如何在python中编写代码来识别这些元素?

3 个答案:

答案 0 :(得分:2)

尝试使用xpath "//a[text()='Create new challenge')]"

答案 1 :(得分:1)

我强烈建议不要使用YuvarajHK去过的路线。 Xpath很多slower and much less readable than CSS

相反,使用CSS。所以这里的问题是,没有一个属性可以匹配。在onclickhref上进行匹配并不聪明,因此在CSS方面只有一个选项。我强烈推荐 ...

的选项

使用父子层次结构来唯一标识您的元素。

所以,你的元素有一个父元素。而不是在另一个答案中给出的xpath在文本上匹配非常低效,而是找到该特定元素的父级。

请考虑以下事项:

<div id="newChallenge">
  ...
  <a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a>
  ...
</div>

所以第一步是找到elemnt的父级。如果元素的父元素没有ID,那就没问题。再上一层楼。

在我们的案例中:我们的父选择器为div#newChallenge,我们链接的选择器只是a

我们的CSS选择器将是

div#newChallenge a

(或)

div#newChallenge > a

(取决于a是否是后代 - 而不是子项)

此外,如果您有多个链接:

<div id="newChallenge">
  <a href="someOtherPage.html">Hi</a>
  <a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a>
  <a onclick="viewmodel.view_results(false);" href="#">Create something else</a>
</div>

您可以看到我们的选择器div#newChallenge a无法唯一标识我们的元素。因此,让我们找到链接的索引。在这种情况下,我们要选择的链接索引为2,因为......

<div id="newChallenge">
     (1)  <a href="someOtherPage.html">Hi</a>
  -> (2)  <a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a>
     (3)  <a onclick="viewmodel.view_results(false);" href="#">Create something else</a>
</div>

然后,我们可以添加CSS伪类:nth-of-type(或者甚至是其他:nth-*伪类)

你的最终选择器可能是

div#newChallenge a:nth-of-type(2)

总结:您将用于在 python 中查找元素的代码为:

driver.find_elements_by_css_selector('div#newChallenge a:nth-of-type(2)');

答案 2 :(得分:0)

CSS = A [的onclick * =&#39; viewmodel.view_results(假)&#39;]

请告诉我上面的CSS Selector是否正常工作。