algorithm
(algorithm)
#1
Всем привет!!!
Есть следующее дерево:
<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>
нужно найти элемент "траляля"
для этого использую следуюшуый код:
$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. Как с этим бороться ?
Заранее благодарю.
d3unka
(d3unka)
#2
Похоже, что ошибка не в Xpath а в коде
$count = $this->getXpathCount("//div[@id='menu']/ul");
algorithm
(algorithm)
#3
упс...
Извините, произошла ошибка при копировании.
Правильный вариант :
$count = $this->getXpathCount("//div[@id='menu']/ul/li");
P.s.
Отредактировано также в вопросе...
Но это сути не меняет...Вопрос остается открытым 
polusok
(Mykhailo Poliarush)
#4
Код вроде бы правильный, надо смотреть на весь HTML. А зачем использовать цикл? для поиска одного елемента
можно попробывать просто проверить нужную ссылку по следующим локаторам
{syntaxhighlighter brush: xml;fontsize: 100; first-line: 1; }//div[@id='menu']//a[contains(text(),"траляля")]
или
id=menu1
или
//a[@id=“menu1”]
или
link=траляля{/syntaxhighlighter}
algorithm
(algorithm)
#5
Очень просто, сам цикл будет находится в функции которая будет искать запрашиваемый элемент в подбных деревьях ....
Все-равно не понимаю почему не работает... 
polusok
(Mykhailo Poliarush)
#6
я проверил у себя на Java, потому что PHP у меня не настроен и у меня все работает.
код который я тестирую
{syntaxhighlighter brush: xml;fontsize: 100; first-line: 1; }<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>{/syntaxhighlighter}
код который тестирует приложение
{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }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();
}
}{/syntaxhighlighter}
что я получаю в результате
{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }2
yes with getText
yes with isElementPresent
{/syntaxhighlighter}
algorithm
(algorithm)
#7
polusok, Большое спасибо за породеланую вами работу!!!!
В конце-концов функция getText
решила эту проблему.
polusok
(Mykhailo Poliarush)
#8
рад что у вас все получилось!