Как наити все элементы одного класса и записать их значения в массив

codeception
Теги: #<Tag:0x00007fedc1326f70>

(Konstantin) #1

Задача такая: надо проверить одну колонку в таблице и убедиться что все ячейки содержат имя пользователя оно должно быть везде одинаковым.

тоесть в теории надо найти все элементы допустим “.class1” и загрузить значения в массив, и затем проверить массив что все элементы там равны допустим “username”.

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

  [21] => Facebook\WebDriver\Remote\RemoteWebElement Object                                                                                                                  
      (                                                                                                                                                                      
          [executor:protected] => Facebook\WebDriver\Remote\RemoteExecuteMethod Object                                                                                       
              (                                                                                                                                                              
                  [driver:Facebook\WebDriver\Remote\RemoteExecuteMethod:private] => Facebook\WebDriver\Remote\RemoteWebDriver Object                                         
                      (                                                                                                                                                      
                          [executor:protected] => Facebook\WebDriver\Remote\HttpCommandExecutor Object                                                                       
                              (                                                                                                                                              
                                  [url:protected] => http://127.0.0.1:4444/wd/hub                                                                                            
                                  [curl:protected] => Resource id #326                                                                                                       
                              )                                                                                                                                              
                                                                                                                                                                             
                          [sessionID:protected] => 9e1959b1-e53b-496a-9d69-25b86e2f1872                                                                                      
                          [mouse:protected] =>                                                                                                                               
                          [keyboard:protected] =>                                                                                                                            
                          [touch:protected] =>                                                                                                                               
                          [executeMethod:protected] => Facebook\WebDriver\Remote\RemoteExecuteMethod Object                                                                  

RECURSION
)

              )                                                                                                                                                              
                                                                                                                                                                             
          [id:protected] => 25                                                                                                                                               
          [fileDetector:protected] => Facebook\WebDriver\Remote\UselessFileDetector Object                                                                                   
              (                                                                                                                                                              
              )                                                                                                                                                              
                                                                                                                                                                             
      )

(Sergey Korol) #2

А какой метод отвечает за получение текста элемента? Разве findElement(-s) является замыкающим звеном цепочки действий? :wink: Если абстрагироваться от массивов, как же вы до этого получали текст какого-либо элемента на странице? Ответив на этот вопрос, задумайтесь - а есть ли принципиальное отличие между findElement и findElements? Ну получили вы набор элементов… А кто ж за вас теперь их обработает? :wink:


(Konstantin) #3

их за меня обработает foreach цикл с проверкой например.


(Sergey Korol) #4

Тогда вам наверняка будет интересно почитать, что из себя представляет WebElement, список которых возвращается методом findElements.

Если и тут тупик, то welcome to codeception sources -> WebDriver module. Вас наверняка заинтересует метод getVisibleText, получающий текст первого найденного элемента.

Надеюсь, что этих намеков будет достаточно, чтобы понять, как обработать полученный вами список.

П.С. Вообще говоря, прежде чем браться за чей-то готовый фреймворк, крайне желательно почитать документацию о механизме, лежащем в основе. В противном случае, вам будет ой как не просто в дальнейшем.


(Дмитрий Мирошник) #5

Загрузить колонку в массив, используя findElements с локатором, определяющим соответствующую колонку (что-то типа //tr/td[x], если табличка на странице одна и не планируется изменения дизайна страницы, в противном случае используйте нормальный локатор с использованием имени или id таблички и вместо x - ссылку на имя ряда), затем проверить foreach. Это если тупо. Если умно - в page object, описывающим данную страницу, определить класс Table, для которого локаторами прописать доступ к рядам и колонкам, затем использовать его в тестах.


(Konstantin) #6

вариант навёл на мысли, спасибо!


(Konstantin) #7

Если вдруг кому понадобится, я сделал хелпер функцию. Выводит массив с текстом всех найденых элементов

public function findAllElements($cssSelector)
{
    $webDriver = $this->getModule('WebDriver')->webDriver;
    $els = $webDriver->findElements(WebDriverBy::cssSelector($cssSelector));
    if (!empty($els)) {
        return array_map(
            function (\Facebook\WebDriver\WebDriverElement $e){
                return $e->getText();
            }, $els
        );
    }
    throw new ElementNotFound($cssSelector, 'CSS selector not found');
}

(Andrey Kim) #8

Разве http://codeception.com/docs/modules/PhpBrowser#grabMultiple не то же самое ?


(Konstantin) #9

ЛОЛ, да ))