2014-04-30 17 views
5

Testowałem przy użyciu Selenium WebDriver i szukałem kodu XPath, aby uzyskać wartość atrybutu elementu HTML w ramach moich testów regresyjnych. Ale nie mogłem znaleźć dobrej odpowiedzi.Jak uzyskać wartość atrybutu przy użyciu XPath

Oto mój przykładowy element HTML:

<div class="firstdiv" alt="testdiv"></div> 

chcę uzyskać wartość atrybutu "alt", używając XPath. Mam XPath, aby dostać się do elementu div za pomocą atrybutu class, który stanowi:

//div[@class="firstdiv"] 

Teraz szukam kodu XPath, aby uzyskać wartość atrybutu „alt”. Zakładam, że nie wiem, jaka jest wartość atrybutu "alt".

+3

Nie będziesz mógł tego zrobić z Selenium. Selenium oczekuje, że zapytania XPath zwrócą fizyczne elementy DOM. Dlaczego 'getAttribute ('alt')' nie działa? – Arran

+0

@Arran Ponieważ podczas uruchamiania zdalnej selekcji (np. Browserstack), trwa to całe wieki: każdy 'getAttribute' to' + = 2 * opóźnienie. –

+0

Agreed @ polkovnikov.ph, podczas uruchamiania Remote Selenium powinieneś zrobić wszystko, aby twoje testy były mniej rozmowne, ale w tym przypadku nie ma innego sposobu niż dwa połączenia - jeden, aby uzyskać element i jeden, aby uzyskać atrybut od to. – Arran

Odpowiedz

9

Można użyć metody getAttribute().

driver.findElement(By.xpath("//div[@class='firstdiv']")).getAttribute("alt"); 
+0

dziękuję Richard za szybką odpowiedź ... jednak moim przypadkiem jest to, że mam tę aplikację, w której użytkownik po prostu dostarczy mi xpath i na jej podstawie system wykona test ... ale myślę, że nie ma innej drogi niż wykonaj dwa połączenia ... najpierw pobierz element, a następnie uzyskaj atrybut –

0

Korzystanie z C#, .NET 4.5 i selen 2,45

Stosować findElements uchwycić firstdiv elementy w kolekcji.

var firstDivCollection = driver.findElements(By.XPath("//div[@class='firstdiv']")); 

Następnie przejrzyj kolekcję.

 foreach (var div in firstDivCollection) { 
      div.GetAttribute("alt"); 
     } 
0

Wystarczy użyć executeScript i zrobić XPath lub querySelector/getAttribute w przeglądarce. Inne rozwiązania są błędne, ponieważ na zawsze trzeba zadzwonić pod numer getAttribute dla każdego elementu z Selenium, jeśli masz więcej niż kilka.

var hrefsPromise = driver.executeScript(` 
     var elements = document.querySelectorAll('div.firstdiv'); 
     elements = Array.prototype.slice.call(elements); 
     return elements.map(function (element) { 
       return element.getAttribute('alt'); 
     }); 
    `); 
0

Selenium Xpath może zwracać tylko elementy. Powinieneś przekazać funkcję javascript, która wykonuje xpaths i zwraca ciągi do selenu.

Nie jestem pewien, dlaczego tak się stało. Xpath powinien obsługiwać zwracane łańcuchy.

Powiązane problemy