2013-05-28 6 views
0

Итак, для моего проекта я использую Selenium, чтобы проверить, что значимые поля находятся в моей DOM. XML я анализирую ниже:Selenium getText() не работает

<results> 
<result index="1"> 
<track> 
<creator>God</creator> 
</track> 
</result> 
<results> 

Для первой вещи, я получаю список всех результатов тегов как webElements команды:

List<WebElement> result_list = driver.findElements(By.tagName("result")); 

Я тогда сделать цикл, чтобы проверить что тэг-создатель существует, запустив

try { 
for (int i = 0; i < result_list.size(); i++) { 
WebElement track = result_list.get(i).findElement(By.tagName("track")); 

    System.out.println(track.findElement(By.tagName("creator")).getText()); 
System.out.println(track.getTagName()); 
System.out.println(track.getAttribute("creator")); 

} 
result = true; 
} 
catch (Exception e) { 
result = false; 
} 

Я вставил операторы печати, чтобы увидеть, что говорит каждый тег. Я новичок в селене, поэтому я просто пытаюсь убедиться, что я правильно повторяю веб-элементы, то есть каждый вызов getText и getAttribute должен отличаться для каждой итерации цикла. Единственная проблема заключается в том, что я получаю пустую строку, распечатанную для каждого вызова getText(), и null для каждого вызова getAttribute(). Почему это происходит? Результат ниже.

<empty string> (nothing is printed, just illustrating the empty string) 
track 
null 

Любая помощь была бы принята с благодарностью!

+0

Может быть, вы можете использовать следующую ссылку [assertTextPresentXML] (http://wiki.openqa.org/display/SEL/assertTextPresentXML) – Smit

ответ

1

Selenium не обрабатывает XML. Это только HTML. Пожалуйста, прочитайте документацию, это совершенно ясно.
Может быть плагин

0

WebElement.getAttribute(String) не возвращает то, что вы ожидаете, потому что есть небольшое недоразумение в отношении того, что такое атрибут. Атрибут элемента определяется в теге элемента ('id', 'name', 'style' и т. Д.).

Что вы пытаетесь сделать, это найти дочерний элемент <track>, когда вместо этого вы пытаетесь найти <track creator="a_creator">, который вернет то, что вы ожидаете.

Я никогда не мог получить WebElement.findElement(), чтобы работать с другим WebElement, не опускаясь до xpath. Так что-то вроде:

WebElement parent = driver.findElement(By.id("parent")); 
WebElement child = parent.findElement(By.tagName("child")); 

Никогда не работает. Однако в этом случае примерно следующее:

WebElement parent = driver.findElement(By.id("parent")); 
WebElement child = parnet.findElement(By.xpath(".//creator")); 

Должно работать. Если вы новичок в xpath, вы можете подумать о быстром прогоне через какой-то basic tutorials.

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