2015-10-29 4 views
-2

Я пытаюсь выяснить значение между узлами xpath. Я старался изо всех сил, но не смог настроить таргетинг на это значение с помощью Xpath.Значение Xpath между узлами

<span class="passwordmessage" id="PasswordMessage" name="PasswordMessage"></span> 
 
<br class=""> 
 
<br class=""> 
 
<span class="">The users new password is: </span> 
 
"7b8rzyx 
 
      
 
\t \t \t " 
 
<br class="">

Я хочу, чтобы захватить 7b8rzyx значение из кода. Я пробовал: next-sibling :: node(), previous-sibling :: br, но просто не мог его получить.

любая помощь приветствуется!

[EDIT] до сих пор я достиг: // диапазон [@ класс = 'passwordmessage']/следующий-родственный :: узел() [(предшествующий-родственный :: пролет), а не (само :: span)] [4]

Вы, ребята, думаете, что есть лучший способ?

ответ

1

Поскольку вы используете Селен, вы не может использовать синтаксис xpath для непосредственного получения текста.

Но это можно легко решить, используя источник страницы и JAVA. Строки

// get the page source and remove all spaces 
String pageSource = driver.getPageSource().replace(" ", ""); 

// split the page source into 2 based on the text and use the second 
// part. This will give the required text plus the additional HTML 
pageSource = pageSource.split("<span>The users new password is: </span>".replace(" ", ""))[1]; 

// split again using the <br/> to get the required text 
pageSource = pageSource.split("<br/>")[0]; 

System.out.println(pageSource.trim()); 

Надеюсь, это вам поможет.

+0

пока только этот вариант работал для меня. благодаря тонну. +1 с моей стороны. – Rajesh

1

Если предположить, что код находится в какой-то div тег (или любой другой тег для этого вещества), как это показано ниже:

<div class="something"> 
    <span class="passwordmessage" id="PasswordMessage" name="PasswordMessage"></span> 
    <br class=""> 
    <br class=""> 
    <span class="">The users new password is: </span> 
    "7b8rzyx 

       " 
    <br class=""> 
</div> 

ли это:

String firstText = driver.findElement(By.xpath("//div[@class='something']")).getText(); 
String firstChildText = driver.findElement(By.xpath("//div[@class='something']/span[2]")).getText(); 
String firstText = firstText.replace(firstChildText, ""); 
+0

Если я пытаюсь захватить DIV, то это даст мне больше текста. что больше, чем я требовал. и просто с помощью таргетинга он дает мне null. – Rajesh

+0

@Rajesh - Не могли бы вы предоставить полный HTML или еще какой-нибудь HTML-код выше и ниже HTML-кода, который вы предоставили? Вы можете добавить его в вопрос или вставить его здесь, используя gist.github.com. – JRodDynamite

+0

https://gist.github.com/anonymous/b38899d5e3fbe51fa86e там вы идете. Надеюсь, это то, о чем вы просили. – Rajesh

1

предположим, что существует верхний элемент:

XPath:

//div[@class='something']/child::text() 
+0

@Mehsum он возвращает null. – Rajesh

+0

Извините, не ошибайтесь. он должен быть верхним. –