单击功能在Selenium驱动程序C中不起作用#

时间:2014-12-07 07:53:05

标签: c# html selenium selenium-webdriver

所以我不太明白为什么这不起作用。 (Win Forms Selenium Firefox webdrivers C#)

driver.FindElement(By.ClassName("video")).Click();

有多个ClassName' s" video"在HTML中,这可能是问题所在。

以下是网站的HTML代码

<div class="video">
    <a style="background-image: url(&quot;http://pthumbnails.5min.com/10370971/518548518_c_240_135.jpg&quot;);" href="/watch/psychic-intervention-help-from-baby-amanda-518548518" data-id="518548518">
        <span>'Psychic Intervention': Help From Baby Amanda</span>
    </a>
</div>

每次视频旁边的HTML中的所有内容都会发生变化。请和谢谢:)

2 个答案:

答案 0 :(得分:2)

如果要打开链接,div不是您要单击的元素。您需要单击div中的链接(&lt; a&gt;元素)。

如果您不知道链接文本或网址是什么,但是您知道它位于带有&#34;视频&#34;的div中,您可以通过xpath找到该元素,方法是查找第一个&lt; a&gt;带有视频类的div后面的标记。

driver.FindElement(By.XPath("//div[@class='video']/a")).Click();

FindElement也总是选择DOM中符合条件的第一个元素,如果您只想点击任何视频链接就可以了。

但是,如果类视频中有多个div具有&lt; a&gt;元素,并且您想要点击特定的视频链接,您可能需要使用driver.FindElement s 来获取所有视频链接,比较信息,然后单击所需的视频链接。

答案 1 :(得分:0)

因为有多个类名称带有“video”,你需要隔离你的xpath以使它指向相关的元素。

以下是实现方法:

1 - 使用带视频类名的 div和span标记内的innerHTML /文本(假设整个内部只有1个innerHTML / text实例页):

driver.FindElement(By.XPath("//div[@class='video']//span[contains(text(),'Help From Baby Amanda ')]")).Click();

2 - 使用'a'标记的唯一属性'data-id'(假设data-id实际上是UNIQUE):

driver.FindElement(By.XPath("//a[@data-id='518548518']")).Click();

3 - 使用'a'标记和span标记的innerHTML / text (假设整个页面中只有1个innerHTML / text实例):

driver.FindElement(By.XPath("//a/span[contains(text(),'Help From Baby Amanda ')]")).Click();

4 - 使用 span标记的innerHTML / text (假设整个页面中只有1个innerHTML / text实例):

driver.FindElement(By.XPath("//span[contains(text(),'Help From Baby Amanda')]")).Click();

注意: - 有多种方法可以做到这一点。以上是我能想到的方法,基于给出的HTML代码片段。