使用Selenium Basic我试图点击嵌套在<li>
标签中的元素'MyLocalLang'。
来源是:
<div id="navBar" class="NavBar">
<nav id="navMenu" class="Wrapper"> == 40
<ul class="navMenuUL">
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li>
<a class="nav" href="//en.mysite.com/item/">MyLocalLang</a>
</li>
<li> ... </li>
</ul>
</nav>
我必须只选择公开<li>
标签:其他标签包含无用的信息。
代码driver.FindElementByXPath("//*[@id='navMenu']/ul/li[9]/a")
效果很好,但是:
<li>
代码都存在。我的尝试无效。 我试过了:
driver.FindElementByXPath("//*[@id='navMenu']/ul/li[contains(@href,'*mysite.com/item/')]/a").Click
有或没有最终/a
,以及许多其他人。
任何人都可以帮我制作正确的xpath表达式,点击该链接,无论是本地语言还是其在列表中的位置,请?请注意,我在VBA项目中使用了selenium。
提前致谢。
答案 0 :(得分:0)
href
属性位于<a>
标记中,而不是<li>
标记中。尝试
driver.FindElementByXPath("//*[@id='navMenu']/ul/li/a[contains(@href, 'mysite.com/item/')]").Click()
您还应该从*
值中删除href
,它将被视为要搜索的字符串的一部分。
答案 1 :(得分:0)
href
是锚点{@ 1}}的属性,请尝试
li
答案 2 :(得分:0)
首先获取所有li元素并将它们保存在WebElement列表中。然后在循环中使用它的tagName获取元素。
尝试使用如下的css选择器:
List<WebElement> allLiElems = driver.findElements(By.cssSelector("#navMenu > ul > li"));
for (WebElement elem : allLiElems) {
String link = elem.findElement(By.tagName("a")).getAttribute("href");
if(link.contains("mysite.com")){
elem.findElement(By.tagName("a")).click();
}
}