2012-03-27 12 views
0

Ich versuche, ein Element "Nature News Standard Artikel in Nature News & Comment", die Teil des unten genannten HMTL-Code ist.Abrufen eines Elements von XPath/CSS aus HTML

Ich habe folgende WebDriver Code in Selen:

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

}

Problem ist: Ich kann keine das gewünschte Element durch XPath/CSS retrive von 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

Ich habe gerade versucht, Ihr Verhalten zu reproduzieren, hatte aber kein Glück. Der Xpath-Ausdruck gibt mir das richtige Element zurück. Welchen Browser benutzen Sie, was bedeutet "Ich kann nicht abrufen"? Löscht der Webdriver NoSuchElementException? Übrigens hat der angegebene HTML-Code nicht "Polopoly CM" als Titel, was bedeutet, dass Ihr Code überhaupt nicht ausgeführt wird. –

Antwort

0

Ich sehe zwei Elemente, die von Ihrem XPath-Locator ausgewählt werden können. Versuche beide zu finden.

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

Ihre HTML-Code ist: Natur Nachrichten Standard-Artikel in Nature Nachrichten & Kommentar

Also, Sie ID oder XPath verwenden können, um das Element Text abzurufen, wie folgt:

ID verwenden:

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

mit XPath:

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

Wenn Elementtext nicht abgerufen wird, verwenden Sie xpath einschließlich // form ............ –

0

css = a [href * = 'javascript: submitForm']> span.p_textOutput

die oben CSS-Selektor-Versuchen. Ich bin mir sicher, dass es klappen wird.

Bitte lassen Sie mich wissen, es funktioniert oder nicht.

Verwandte Themen