找到'li'元素

时间:2017-10-16 13:07:16

标签: java selenium-webdriver

有人可以帮助我找到第5个' li '元素,因为在尝试找到它时收到错误。以下是页面上的外观:

<ul class="navigation-primary navigation-primary--right js-navigation-primary">
<li><a data-modal="login-modal" href="javascript:void(0);" data-modal-content-switch="login-options" class="is-button-group-right js-prevent-trigger modal-content-button"><span>Logga in</span></a></li>
<li><a href="javascript:void(0)" class="icon icons8-Search has-no-border-bottom" data-menu="search"></a></li>
<li><a href="javascript:void(0)" class="has-no-border-bottom" data-menu="language">Svenska</a></li>

实际上,我需要使用以下属性的最后一个

data-menu="language"

由于有多种语言 - 我认为它可以通过 if 循环来解决:

if (driver.findElement(By.xpath("//*[@id="header"]/div[2]/div/ul[2]/li[5]/a") != null
driver.findElement(By.xpath("//*[@id="header"]/div[2]/div/ul[2]/li[5]/a").click();
else {
 system.out.println("element not present");

 }

因为有几种语言并且每个语言都有 li [5] - 认为lang名称可以解决它,但没有找到解决方案。 提前谢谢

3 个答案:

答案 0 :(得分:1)

根据您提供的HTML,以下xpath / cssSelector应该有效:

driver.findElement(By.xpath("//ul[@class='navigation-primary navigation-primary--right js-navigation-primary']/li[contains(.,'Svenska')]"));
  

OR

driver.findElement(By.cssSelector("ul.navigation-primary.navigation-primary--right.js-navigation-primary > li.navigation-primary.navigation-primary--right.js-navigation-primary"));

答案 1 :(得分:1)

我知道你接受了一个答案,但是如果你使用像

这样的简单CSS选择器会更清晰,更清晰
driver.findElement(By.cssSelector("a[data-menu='language']")).click();

或者您可以更具体,并使用XPath

按语言查找元素
driver.findElement(By.xpath("//a[@data-menu='language'][.='Svenska']")).click();

此外,您无法检查元素是否为null。如果不存在,.findElement()将抛出异常。如果要检查元素是否存在,请使用.findElements()并检查集合是否为空

List<WebElement> links = driver.findElements(...);
if (links.isEmpty())
{
    // element doesn't exist
}
else
{
    // element exists
    links[0].click(); // or whatever
}

答案 2 :(得分:-1)

冒着重新定义问题的风险,我很想在您的HTML中添加一些id代码并致电driver.findElement(By.id(name))

优点是,如果在列表的开头添加额外的项目,那么您的测试不会中断。