Перейти к содержимому

Фотография

StoreAllFields: как правильно использовать по назначению?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 Rosenrot

Rosenrot

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 02 декабря 2010 - 10:47

Собственно, задача: получить id всех чекбоксов на странице в массив, а потом вписать их в поле для заметок на странице.

$this->selenium->open("http://*****");
$mass = $this->selenium->getAllFields();
$this->selenium->click("//input[@value='Back']");
$this->selenium->waitForPageToLoad("30000");
$this->selenium->type("comments", $mass);


В результате в "comments" слово array (логично). Кто может подсказать выход? :)
зы. Новичок в php - чтение оф.документации по php пока не подкинуло оформленной идеи, как правильно вывести значения массива.
  • 0

#2 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 02 декабря 2010 - 11:13

Выход собственно простой - пройтись по массиву, составить строку из его элементов и передать её в метод type.
  • 0

#3 Rosenrot

Rosenrot

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 02 декабря 2010 - 11:55

Выход собственно простой - пройтись по массиву, составить строку из его элементов и передать её в метод type.


Я попробовала еще один вариант:

for($i=0; $i<count($mass); $i++){
$this->selenium->type("tracking_comments", $mass[$i]);
}


он не сработал потому, что type принимает только строку?
  • 0

#4 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 02 декабря 2010 - 12:13

без чтения доков по php никак.
Массивы там могут быть многомерными и одномерными. Использовать именованные ключи либо автоматические.
К массиву можно обращатся через цикл foreach либо использовать курсор массива.

Если не хотите читать доки по php могу предложить вам такое решение (написал за время кофе):
вот эта функция будет возвращать следующий элемент массива - один раз вставляете в свой код данный фрагмент -

$super_mass = $mass; //для сохранности создаёте копию массива

function robot () //фукнция при каждом вызове возвращает следующий элмент массива $$super_mass
{
global $super_mass;//делаете массив видимым
global $iiii;//делаете видимым счётчик
$arr = $super_mass; //создаётё рабочую копию массива,
$arr = array_reverse($arr);//делаете чёрную магию
if (($arr = array_reverse($arr))&&!FALSE)//делаете чёрную магию
    {
       $iskomoe = reset($arr);//возвращаете первый элемент массива
       unset($super_mass [key($arr)+$iiii]);//делаете чёрную манию
    }
return $iskomoe;
}

вызвать её нужно вот так:

$a = robot ();

советую вам посмотреть и по возможности оптимизировать её работу.
  • 0

#5 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 02 декабря 2010 - 14:01


Выход собственно простой - пройтись по массиву, составить строку из его элементов и передать её в метод type.


Я попробовала еще один вариант:

for($i=0; $i<count($mass); $i++){
$this->selenium->type("tracking_comments", $mass[$i]);
}


он не сработал потому, что type принимает только строку?

Ну судя по коду должно работать, но я не спец в PHP. Могу только сказать, что такой вариант будет неоптимальным, т.к. для каждого элемента дёргается драйвер, а это достаточно затратная операция.
  • 0

#6 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 02 декабря 2010 - 14:53

$mass[$i]
- возвращает $i элемент из неассоциативного одномерного массива вида
$arr = array (1,2,3,4,5,6);
если у вас
ассоциативный массив - то работать не будет
если у вас многомерный массив - работать не будет - т.е. вернёт значение array - если ваш массив - многомерный массив состоящий из других массивов.

плз выполните
var_dump ($mass);

и если оно выдаст что-то отличное от
$mass = Array (
[0] => 'значение 0'
[1] => 'значение 1'
...
)
то в этом кроется ошибка.

массив должен быть доступен в классе теста - на php тесты выполняются под phpunit с в нескольких наследуемых друг от друга классах.
Для обхода массива - используйте foreach.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных