Добрый день.
Хочется реализовать следующую функцию:
- Найти в таблице(ID таблици известно) текст.
- Записать номера столбца и строчки данного текста в две переменные (tr, td).
Можно ли это сделать в codeception без приминения grabMultiple?
Добрый день.
Хочется реализовать следующую функцию:
Если я правильно понимаю то , что вам нужно сделать, то можно воспользоватся xpath.
Например, count(//tbody/tr/td[contains(., ‘your text’)]/ancestor::tr)+count(//tbody/tr/td[contains(., your text’)]) даст вам номер строки с этим элементом. Со столбцом аналогично.
Подробнее об этом смотрите тут QA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
огромное спасибо, но судя по синтаксису это явно не для PHP.
php тут не причем. это выражение xpath
И снова здравствуйте)) На данном этапе ситуация следующая:
Буду рад любому совету. Заранее спасибо.
начни писать xpath поэтапно и дописывай сверяясь с актуальным кол-вом, сначала таблица, потом строки, потом ячейки
Здесь дело не в xPath, а в понимании того что такое фрймворк для тестирования и программирование на РНР. [quote=“Anatoly_Kuznetsov, post:5, topic:11019”]
$N = count(’//table[@class=“table1”]/descendant::tr/td[10 and text()=“my text”]/ancestor::tr’) + count(’//table[@class=“table1”]/descendant::tr/td[10 and text()=“my text”]); получаю $N = 2;
[/quote]
Вот яркое выражение этого. Результат правильный с точки зрения РНР, т.е. 1 строка это 1-н элемент массива (count).
Согласен. Поэтому решил пойти другим путе:
Нохожу в табице ячейку, поднимаюсь по XPath на уровень выше (уровень tr) и хочу получить позицию, но получаю пустое значение :
$I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {
return $webdriver->findElement(WebDriverBy::xpath(’//table[@class=“table1”]/descendant::tr/td[position()=“10” and text()=“my text”]’))->findElement(WebDriverBy::xpath("…"))->getAttribute(‘position’);
});
При этом …findElement(WebDriverBy::xpath("…"))->getText(); - выдает содержимое всей строки.
Зачем такой огород можно проще, непосредственно функциями Codeception:
$n = $I->grabAttributeFrom('//table[@class="table1"]/descendant::tr/td[position()="10" and text()="my text"]/..', 'position');
Спасибо за оптимизацию.
Но к сожалению результат что при моем коде что при Вашем переменная получается пустая.
У HTML кода стандартный вид. без каких либо атрибутов у [tr] :
[tbody]
[tr][/tr]
[tr][/tr]
[tr][/tr]
…
[/tbody]
Так что ломаю голову дальше.
Я вообще то не совсем понял что хотите получить?
Номер строки в которой найден элемент.
А что у строк есть прямая нумерация (явная)?
Ссылка на страницу в студию (не скриншот, со скриншотом не поработаешь).
Как пример, таблица чепионта по футболу.
Необходимо определить номер страки по названию клуба.
Сылка на сайт:http://www.sport-express.ru/football/rfpl/
мы находим “Арсенал Т” в второй колонке:
$webdriver->findElement(WebDriverBy::xpath(‘//table[@class=“table_score nbb”]/descendant::tr/td[position()=“2”]/a[ text()=“Арсенал Т”]’)), но как получить номер строки?
Вот пожалуйста (согласно ссылки) обычный одноякорный локатор:
//table[@class="table_score nbb"]//td/a[contains(text(), "Анжи")]/../../td[1]
Огромное спасибо. Задача решена.