Java 查找';李';要素

Java 查找';李';要素,java,selenium-webdriver,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-

有人能帮我找到第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>
因为有几种语言-我想它会用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 name可以解决它,但没有找到解决方案。
提前感谢

根据
HTML
您提供的以下
xpath
/
css选择器应该可以工作:

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


冒着重新定义您的问题的风险,我很想在html中添加一些
id
标记,并调用
driver.findelelement(By.id(name))


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

我知道您接受了一个答案,但如果您使用一个简单的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
}
List links=driver.findElements(…);
if(links.isEmpty())
{
//元素不存在
}
其他的
{
//元素存在
链接[0]。单击();//或其他链接
}

您能总结一下您试图自动化的具体手动步骤吗?我没有看到任何第五个
  • 是这样的。我总共可以看到3个标签。我遗漏了什么吗?@DebanjanB Ups,我的错误-3个li标签确实是,而不是5个-只是写了一个没有正确计数的问题。SorrySo您想定位/查找哪个
  • 元素?@DebanjanB this one class=“has no border bottom”data menu=“language”
    driver.findElement(By.xpath("//a[@data-menu='language'][.='Svenska']")).click();
    
    List<WebElement> links = driver.findElements(...);
    if (links.isEmpty())
    {
        // element doesn't exist
    }
    else
    {
        // element exists
        links[0].click(); // or whatever
    }