2015-06-11 3 views
2

У меня возникли проблемы с нажав на элемент меню, который записывается следующим образом:Невозможно проследить элемент по атрибуту или текст

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

Solutions? Sugestions? Ошибки?

+0

Являются ли эти 3 вкладок всегда отображаются или вы должны нажать на мужчинах, чтобы отобразить те? –

ответ

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

будет работать только тогда, когда элемент является звеном, которое в этом случае не.

+0

также не уверен, что вы пытались выполнить с помощью своего блока кода, но я могу сказать, взглянув на него и html, который вы вставили, что он не будет работать. Вы пытаетесь получить атрибут data-tab из объекта .ctrlTabsProfile, но этот объект не имеет этого атрибута. И ваш вызов findElements будет когда-либо возвращать только один элемент, так как ваш селектор просто выбирает родительский элемент списка. – aholt

+0

Вы правы, большое вам спасибо, хорошо провести день! –

1

Aholt is right, driver.findElements(By.cssSelector(".tabs.ctrlTabsProfile")) вернется только ul элементов. Чтобы получить доступ ко всему <li>, вы можете попробовать:

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

Да, хорошая точка, я бы, вероятно, не нашел этого, спасибо и хорошо провел день! –

Смежные вопросы