首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找'li‘元素

寻找'li‘元素
EN

Stack Overflow用户
提问于 2017-10-16 13:07:16
回答 3查看 623关注 0票数 1

有人能帮我找一下第五个'li‘元素吗?因为那个接收错误时试图定位它。以下是页面上的外观:

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
data-menu="language"

因为有几种语言--我想它可以用if循环来解决:

代码语言:javascript
复制
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");

 }

因为有几种语言,而且每一种语言都有li5 --认为lang的名字可以解决这个问题,但是没有找到解决方案。提前谢谢你

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-17 02:09:32

我知道你接受了一个答案,但是如果你使用一个简单的CSS选择器,它会更加清晰和清晰。

代码语言:javascript
复制
driver.findElement(By.cssSelector("a[data-menu='language']")).click();

或者您可以更具体地使用XPath按语言查找元素。

代码语言:javascript
复制
driver.findElement(By.xpath("//a[@data-menu='language'][.='Svenska']")).click();

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

代码语言:javascript
复制
List<WebElement> links = driver.findElements(...);
if (links.isEmpty())
{
    // element doesn't exist
}
else
{
    // element exists
    links[0].click(); // or whatever
}
票数 1
EN

Stack Overflow用户

发布于 2017-10-16 13:30:45

根据HTML,您提供了以下xpath/cssSelector应该可以工作:

代码语言:javascript
复制
driver.findElement(By.xpath("//ul[@class='navigation-primary navigation-primary--right js-navigation-primary']/li[contains(.,'Svenska')]"));

代码语言:javascript
复制
driver.findElement(By.cssSelector("ul.navigation-primary.navigation-primary--right.js-navigation-primary > li.navigation-primary.navigation-primary--right.js-navigation-primary"));
票数 1
EN

Stack Overflow用户

发布于 2017-10-16 19:09:31

冒着重新定义您的问题的风险,我会尝试将一些id标记添加到您的html中并调用driver.findElement(By.id(name))

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46771130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档