所以我不太明白为什么这不起作用。 (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("http://pthumbnails.5min.com/10370971/518548518_c_240_135.jpg");" href="/watch/psychic-intervention-help-from-baby-amanda-518548518" data-id="518548518">
<span>'Psychic Intervention': Help From Baby Amanda</span>
</a>
</div>
每次视频旁边的HTML中的所有内容都会发生变化。请和谢谢:)
答案 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代码片段。