我需要使用C#在webdriver中创建一个测试,然后单击一个带有" Text"的链接。在菜单中有这样的结构:
<ul style="overflow: hidden">
<li>
<ul class"menu" style="overflow: hidden">
<li class="class_li">
<a href="/level1/leve2">
<span class="class_span">Text</span>
</a>
</li>
</ul>
</li>
<li />
<li />
</ul>
课程&#34;&#34; class_li&#34;和&#34; class_span&#34;多次使用。我无法修改html代码。
我尝试了几个不同的xpath语句,但每次我得到&#34; InvalidSelectorException未处理&#34;。如何访问我的链接并单击它?
答案 0 :(得分:0)
以下xpath选择第一个a
链接,其中包含带有文字span
的直接子Text
(//a[span/text()='Text'])[1]
我不是Selenium专家,但你应该能够做到这一点:
driver.FindElement(By.XPath("(//a[span/text()='Text'])[1]")).Click();
答案 1 :(得分:0)
好的,所以我做到了。我使用了基于StuartLC答案的Actions和XPath,它看起来像这样:
IWebElement element = driver.FindElement(By.XPath("//a[span/text()='text_from_upper_node']"));
Actions action = new Actions(driver);
action.MoveToElement(element).Build().Perform();
driver.FindElement(By.XPath("//a[span/text()='text_from_link_I_want_to_click']")).Click();
谢谢你的帮助。欢呼声
答案 2 :(得分:0)
如果您可能想要使用多个树,您可以尝试这样的事情吗?
IList<IWebElement> webElements = WebDriver.FindElements(By.ClassName("class_span"));
然后您可以在列表中枚举以点击您想要的内容,甚至可以点击以下内容:
var text = webElements.FirstOrDefault(x => x.Text == "Text");
text.Click();