Java 查找';李';要素
有人能帮我找到第5个“li”元素吗?因为在尝试定位时出现了接收错误。以下是第页的外观: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-
<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
}