无法按属性或文本跟踪元素

时间:2015-06-11 13:34:49

标签: java testing selenium-webdriver webdriver

我在单击菜单中的元素时出现问题:

<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();
    }
   }

解决方案?建议吗?错误?

2 个答案:

答案 0 :(得分:1)

嗯,首先,你的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();

仅在元素是链接时才有效,在这种情况下它不是。

答案 1 :(得分:1)

Aholt是对的,driver.findElements(By.cssSelector(".tabs.ctrlTabsProfile"))只会返回ul个元素。要访问所有<li>,您可以尝试:

driver.findElements(By.cssSelector("ul.tabs.ctrlTabsProfile li.active"))