AT.info ПОСИДЕЛКИ  vKontakte   facebook группа  
Search text at XPath of <a> tag (PHP)
Offline
Зарегистрирован: 25.09.11

Всем привет!!!

Есть следующее дерево:

<div id="menu" class="header_menu">   
   <ul id="v_menu" class="menu">
 

       <li id=" " class="item"   >
             <a id="menu1" class="sitem_href" title=" " href="/blyablya/page/ траляля  " tooltip=" "> траляля </a>
       </li>
       
      <li id=" " class="item"  >
          <a id="menu2" class="sitem_href" title=" " href="/blyablya/page/BUM" tooltip=" "> BUM </a>
       </li>
                  

 

нужно найти элемент "траляля"

для этого использую следуюшуый код:

 

     $count = $this->getXpathCount("//div[@id='menu']/ul/li");

      for ( $i=1; $i<=$count; $i++ ) {

           if($this->isElementPresent("//div[@id='menu']/ul/li[".$i."]/a[text()=' траляля ']")) {
                    print "yes\n";
               }

        }

 

но он ничего не находит...

 

изменение условия в if-e также никчему не привело..

               if($this->isElementPresent("//div[@id='menu']/ul/li[".$i."]/a[contains(text(),' траляля ')]"))

 

Вопросы :
1. Почему?
2. Че делать ?
3. Как с этим бороться ?

 

 

Заранее благодарю.

 

 

Offline
Зарегистрирован: 06.11.10
Похоже, что ошибка не в Xpath

Похоже, что ошибка не в Xpath а в коде

     $count = $this->getXpathCount("//div[@id='menu']/ul");

 

Offline
Зарегистрирован: 25.09.11
ошибка при копировании

упс...
Извините, произошла ошибка при копировании.
Правильный вариант :
$count = $this->getXpathCount("//div[@id='menu']/ul/li");


P.s.
Отредактировано также в вопросе...

Но это сути не меняет...Вопрос остается открытым  Frown

Онлайн
Зарегистрирован: 20.07.09
А зачем использовать цикл? для поиска одного елемента

Код вроде бы правильный, надо смотреть на весь HTML. А зачем использовать цикл? для поиска одного елемента

можно попробывать просто проверить нужную ссылку по следующим локаторам

//div[@id='menu']//a[contains(text(),"траляля")]
или

id=menu1

или

//a[@id="menu1"]

или

link=траляля

n/a
Offline
Зарегистрирован: 25.09.11
Очень просто, сам цикл будет

Очень просто, сам цикл будет находится в функции которая будет искать запрашиваемый элемент в подбных деревьях ....

Все-равно не понимаю почему не работает... Yell

Онлайн
Зарегистрирован: 20.07.09
проверка на Java

я проверил у себя на Java, потому что PHP у меня не настроен и у меня все работает.

код который я тестирую

<html>
	<head></head>
<body>
	<div id="menu" class="header_menu">    
	<ul id="v_menu" class="menu">
		<li id=" " class="item">
			<a id="menu1" class="sitem_href" title=" " href="/blyablya/page/ tralyaya  " tooltip=" "> tralyaya </a>
		</li>
		<li id=" " class="item">
			<a id="menu2" class="sitem_href" title=" " href="/blyablya/page/BUM" tooltip=" "> BUM </a>
		</li>
	</ul>
	</div>
</body>
</html>

код который тестирует приложение

import com.thoughtworks.selenium.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class atinfotest extends SeleneseTestBase {
	@Before
	public void setUp() throws Exception {
		selenium = new DefaultSelenium("localhost", 4444, "*chrome", "file:///C:/at.info/support/2.html");
		selenium.start();
	}

	@Test
	public void testUntitled() throws Exception {
		selenium.open("file:///C:/at.info/support/2.html");
		Number count = selenium.getXpathCount("//div[@id='menu']/ul/li");
		System.out.println(count);
		verifyEquals("tralyaya", selenium.getText("//div[@id='menu']/ul/li[1]"));
		verifyEquals("BUM", selenium.getText("//div[@id='menu']/ul/li[2]"));
		for(int i=1;i<=count.intValue();i++){
			if (selenium.getText("//div[@id='menu']/ul/li["+i+"]").contains("tralyaya")){
				System.out.println("yes with getText");
			}
			if (selenium.isElementPresent("//div[@id='menu']/ul/li["+i+"]/a[contains(text(),'tralyaya')]")){
				System.out.println("yes with isElementPresent");
			} 
			
		}
	}
	
	@After
	public void tearDown() throws Exception {
		selenium.stop();
	}
}

что я получаю в результате

2
yes with getText
yes with isElementPresent

 

n/a
Offline
Зарегистрирован: 25.09.11
polusok, Большое спасибо за

polusok, Большое спасибо за породеланую вами работу!!!!

В конце-концов  функция getText решила эту проблему.

Онлайн
Зарегистрирован: 20.07.09
ну вот и чудненько

рад что у вас все получилось!

n/a