无法通过属性或文本跟踪元素
Unable to trace an element by attribute or text
我在单击这样写的菜单元素时遇到问题:
<div class="menu">
<ul class="tabs ctrlTabsProfile">
<li class="active" data-tab="tabDetail">User Details</li>
<li data-tab="tabEmail">Email</li>
<li data-tab="tabPass">Change password</li>
<li data-tab="tabAdress">Account Details</li>
</ul>
</div>
我试过这些:
driver.findElement(By.linkText("Account Details")).click();
driver.findElement(By.cssSelector("li[data-tab=tabAdress")).click();
driver.findElement(By.xpath("li[data-tab='tabAdress']")).click();
也尝试列出元素但只得到 null
:
for(WebElement el : driver.findElements(By.cssSelector(".tabs.ctrlTabsProfile"))) {
try {
assertTrue(driver.findElement(By.cssSelector("BODY")).getText().matches("^[\s\S]*Account Details[\s\S]*$"));
} catch (Error e) {
System.out.println("Not found: \"Account Details\".");
}
String s = el.getAttribute("data-tab");
System.out.println(s);
if(s.equals("tabAdress")) {
driver.findElement(By.xpath("li[data-tab='tabAdress']")).click();
}
}
解决方案?建议?错误?
嗯,一方面,您的 xpath 选择器不正确。
driver.findElement(By.xpath("li[data-tab='tabAdress']")).click();
应该是:
driver.findElement(By.xpath("//li[@data-tab='tabAdress']")).click();
编辑:
而且您的 css 选择器也不正确。
driver.findElement(By.cssSelector("li[data-tab=tabAdress")).click();
应该是:
driver.findElement(By.cssSelector("li[data-tab='tabAdress']")).click();
编辑#2:
和:
driver.findElement(By.linkText("Account Details")).click();
仅当元素是 link 时才有效,而在本例中不是。
Aholt 是对的,driver.findElements(By.cssSelector(".tabs.ctrlTabsProfile"))
将 return 只有 ul
个元素。要访问所有 <li>
,您可以尝试:
driver.findElements(By.cssSelector("ul.tabs.ctrlTabsProfile li.active"))
我在单击这样写的菜单元素时遇到问题:
<div class="menu">
<ul class="tabs ctrlTabsProfile">
<li class="active" data-tab="tabDetail">User Details</li>
<li data-tab="tabEmail">Email</li>
<li data-tab="tabPass">Change password</li>
<li data-tab="tabAdress">Account Details</li>
</ul>
</div>
我试过这些:
driver.findElement(By.linkText("Account Details")).click();
driver.findElement(By.cssSelector("li[data-tab=tabAdress")).click();
driver.findElement(By.xpath("li[data-tab='tabAdress']")).click();
也尝试列出元素但只得到 null
:
for(WebElement el : driver.findElements(By.cssSelector(".tabs.ctrlTabsProfile"))) {
try {
assertTrue(driver.findElement(By.cssSelector("BODY")).getText().matches("^[\s\S]*Account Details[\s\S]*$"));
} catch (Error e) {
System.out.println("Not found: \"Account Details\".");
}
String s = el.getAttribute("data-tab");
System.out.println(s);
if(s.equals("tabAdress")) {
driver.findElement(By.xpath("li[data-tab='tabAdress']")).click();
}
}
解决方案?建议?错误?
嗯,一方面,您的 xpath 选择器不正确。
driver.findElement(By.xpath("li[data-tab='tabAdress']")).click();
应该是:
driver.findElement(By.xpath("//li[@data-tab='tabAdress']")).click();
编辑:
而且您的 css 选择器也不正确。
driver.findElement(By.cssSelector("li[data-tab=tabAdress")).click();
应该是:
driver.findElement(By.cssSelector("li[data-tab='tabAdress']")).click();
编辑#2:
和:
driver.findElement(By.linkText("Account Details")).click();
仅当元素是 link 时才有效,而在本例中不是。
Aholt 是对的,driver.findElements(By.cssSelector(".tabs.ctrlTabsProfile"))
将 return 只有 ul
个元素。要访问所有 <li>
,您可以尝试:
driver.findElements(By.cssSelector("ul.tabs.ctrlTabsProfile li.active"))