selenium basic中的Xpath:点击嵌套在<ul> <li>

时间:2017-11-23 11:17:44

标签: html css selenium xpath

使用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")效果很好,但是:

  • 并非总是MyLocalLang是该栏的第九个元素;
  • MyLocalLang名称链接字符串可以是任何其他语言,因此MaLangueLocale,MiaLinguaLocale,MiIdiomaLocal等;
  • 网址可能是多种其他语言,因此可能是fr.mysite.com,it.mysite.com,en.mysite.com等。
  • @class'nav'无效,因为每个<li>代码都存在。

我的尝试无效。 我试过了:

driver.FindElementByXPath("//*[@id='navMenu']/ul/li[contains(@href,'*mysite.com/item/')]/a").Click

有或没有最终/a,以及许多其他人。

任何人都可以帮我制作正确的xpath表达式,点击该链接,无论是本地语言还是其在列表中的位置,请?请注意,我在VBA项目中使用了selenium。

提前致谢。

3 个答案:

答案 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();
    }           
}