2012-03-27 5 views
0

Я пытаюсь получить элемент «Nature News Standard Article in Nature News & Комментарий», который является частью ниже кода HMTL.Извлечение элемента XPath/CSS из HTML

Я следующий код WebDriver селена:

if ("Polopoly CM".equals(driver.getTitle())) { 
    System.out.println("----> Title of page <----"); 
    driver.findElement(By.xpath("//*[starts-with(@id,'nav_') and @class='p_textOutput']")); 
System.out.println("----> Xpath Selected <----"); 
    driver.findElement(By.xpath("//*[starts-with(@id,'nav_') and @class='p_textOutput']")).click(); 
    System.out.println("----> Xpath Clicked <----"); 

}

Проблема: я неспособен retrive необходимого элемента через Xpath/CSS с HTML

HTML :

<document> 
<html xmlns:polopoly="http://www.polopoly.com/polopoly/cm/app/gui" xmlns="http://www.w3.org/1999/xhtml" style="cursor: default;"> 
<head> 
<body id="nav_3" class="navFrameBody" onbeforeunload="busyCursor();" onload="onLoad(); idleCursor();"> 
<script type="text/javascript"> <!-- Jasmine.createFrame('nav'); //--> </script> 
<form id="mainform" name="mainform" method="post" action="CM"> 
<input type="hidden" value="2852906396" name="owid"/>** 
<input type="hidden" value="1332852912984" name="ofid"/> 
<input type="hidden" value="nav" name="ofn"/> 
<input type="hidden" value="true" name="ofs"/> 
<input id="nav_1" type="hidden" value="0" name="nav_1"/> 
<input id="nav_2" type="hidden" value="0" name="nav_2"/> 
<div id="nav_13_placeHolder" class="ajax_placeHolder"> 
<fieldset id="nav_14" class="field"/> 
<div id="nav_4" class="p-group quickCreator expanded"> 
<div id="nav_4_state"> 
<input id="nav_15" type="hidden" value="expanded" name="nav_15"/> 
</div> 
<div class="toggleIcon clearfix"/> 
<script lang="javascript">$(document).ready(function() {p_makeExpandable('nav_4', 'nav_15')});</script> 
<fieldset id="nav_16" class="contentCreator field topContentCreator"> 
<div class="quickCreator contentCreator container"> 
<div class="quickCreator header clearfix"> 
<h2> Create New </h2> 
<a id="nav_17" class="customize" href="javascript:actionEventData({$contentId:"18.232.1319560059", $action:"edit", $target:"work", $opentab:"menu/quickCreatorLayout"})">Customize</a> 
</div> 
<div class="list"> 
<div class="quickCreator link"> 
<input type="hidden" value="" name="nav_18"/> 
<a id="nav_18" href="javascript:submitForm(document.mainform, document.mainform.nav_18, "x")"> 
<img id="nav_19" class="centered" alt="" src="images/icons/transparentIcon.png"/> 
<span id="nav_20" class="p_textOutput">Nature News Standard Article in Nature News & Comment</span> 
</a> 
</div> 
</div> 
</div> 
</fieldset> 
</div> 
<div id="nav_5" class="p-group contentTree expanded"> 
<div id="nav_5_state"> 
<input id="nav_21" type="hidden" value="expanded" name="nav_21"/> 
</div> 
<div class="toggleIcon clearfix"/> 
<script lang="javascript">$(document).ready(function() {p_makeExpandable('nav_5', 'nav_21')});</script> 
<div class="field contentTree"> 
<div id="nav_6_placeHolder" class="ajax_placeHolder"> 
<div class="header"> 
<span class="label">Content Tree</span> 
<button id="nav_9" type="button" value="Refresh tree" name="nav_9"> 
<img id="nav_22" class="centered" alt="" src="images/icons/refresh.png"/> 
<span id="nav_23" class="p_textOutput"> Refresh tree</span> 
<script type="text/javascript"> <!-- jQuery(document).ready(function() { addOnClickEvent("nav_9",null, "nav_9_placeHolder", null, new IndicatorLifecycleHook('p.std_ajaxIndicator', true, 0.8, "createImageTop('images/ajax/busy_indicator_big_green.gif')")); }); //--> </script> 
</button> 
</div> 
<div class="tree"> 
<div id="nav_8_placeHolder" class="ajax_placeHolder"> 
<script type="text/javascript"> jQuery.require(["script/polopoly-ui.js"]); </script> 
<input id="nav_8" type="hidden" value="" name="nav_8"/> 
<script type="text/javascript"> jQuery.require(["script/polopoly-ui.js"]); </script> 
<ul id="nav_8_tree" class="tree"> 
</div> 
</div> 
</div> 
</div> 
</div> 
<fieldset id="nav_24" class="field clipboard"> 
<input id="nav_25" type="hidden" value="" name="nav_25"/> 
</fieldset> 
</form> 
<script type="text/javascript"> <!-- jQuery(document).ready(function() { if(window.parent.SeleniumPageLoadCountnav==null) { window.parent.SeleniumPageLoadCountnav=1; window.parent.SeleniumPageLoadCountnavOld=0; } else { window.parent.SeleniumPageLoadCountnav+=1; } }); //--> </script> 
</body> 
</html> 
</document> 
+0

Я просто попытался воспроизвести ваше поведение, но не повезло. Выражение xpath возвращает мне правильный элемент. Какой браузер вы используете, что значит «я не могу получить»? Создает ли webdriver исключение NoSuchElementException? Кстати, данный код html не имеет «Polopoly CM» в качестве названия, что означает, что ваш код вообще не выполняется. –

ответ

0

Я вижу два элемента, которые могут быть выбраны вашим локатором xpath. Попытайтесь найти их обоих.

List<WebElement> elements = webDriver.findElements(By.xpath("your_xpath")); 
for (Element element : elements) { 
    element.click(); 
} 
0

Ваш HTML код: Nature News Standard статьи в Nature News & комментарий

Таким образом, Вы можете использовать идентификатор или XPath для извлечения текста элемента следующим образом:

Использование ID:

String s = driver.findElement(By.id("nav_20")).getText(); 
System.out.println(s); 

Использование XPath:

String s1 = driver.findElement(By.xpath("//span[@id='nav_20']")).getText(); 
System.out.println(s1); 
+0

Если текст элемента не получен, используйте xpath, включая // form ............ –

0

CSS = а [HREF = 'JavaScript: SubmitForm']> span.p_textOutput

Попробуйте выше CSS Selector. Я уверен, что это сработает.

Пожалуйста, дайте мне знать, работает ли это или нет.

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