2016-06-30 5 views
0

Я хочу знать, можно ли получить XPATH веб-элемента?Как найти XPath of Selenium WebDriver?

test = driver.find_elements_by_css_selector('div.menu-listes ul.menu.menu-horizontal.menu_left li h3') 

for t in test: 
    //i want to have the XPATH 

я попытался t.location, но я получаю только {'y': 0, 'x': 0}

+0

Почему бы вам просто не найти самого XPath вместо того, чтобы использовать селектор CSS? – Jason

+0

это всего лишь пример, я хочу, чтобы POSSIBLE получить xpath веб-элемента или не – parik

+0

, вы должны положить html-тег здесь? вы пытаетесь найти xpath из локатора css? –

ответ

1

Ответ от duplicate question в Python (непроверенных):

test = driver.find_elements_by_css_selector('div.menu-listes ul.menu.menu-horizontal.menu_left li h3') 

for t in test: 
    driver.execute_script("""gPt=function(c){ 
           if(c.id!==''){ 
            return'id("'+c.id+'")' 
           } 
           if(c===document.body){ 
            return c.tagName 
           } 
           var a=0; 
           var e=c.parentNode.childNodes; 
           for(var b=0;b<e.length;b++){ 
            var d=e[b]; 
            if(d===c){ 
             return gPt(c.parentNode)+'/'+c.tagName+'['+(a+1)+']' 
            } 
            if(d.nodeType===1&&d.tagName===c.tagName){ 
             a++ 
            } 
           } 
          }; 
          return gPt(arguments[0]).toLowerCase();""", t) 
+0

это работает, спасибо – parik

+0

этот код может быть проще написать, если вы использовали одну строку с тремя кавычками, а не пучок цитируемых строк. –

+0

@BryanOakley Справедливая точка, я изменю его. – RemcoW

0

не очень. xpath не уникальны, и если он автоматически ее получит, то, вероятно, это будет не так эффективно и безопасно для xpath (например, проверьте элемент и проверьте xpaths, который предоставляет вам Google Chrome. Обычно это что-то вроде div [1]/div [2]/div/div .. и т. Д.)

Если вы не заботитесь о том, что у вас может быть плохой xpath, вы можете написать функцию, которая продолжает получать родителя, пока вы не достигнете root, сохраняя при этом путь к выбранному элементу.