Проблема xpath с использованием behat для приложения angularjs - PullRequest
0 голосов
/ 31 января 2019

Я пытался создать веб-сканер для компании, в которой я работаю, чтобы использовать ее в сочетании с расширением норки.В прошлом я тоже делал нечто подобное, но разница в том, что теперь страница, которую я пытаюсь пролистать, встроена в angularjs.

Это, похоже, вызывает проблему в моем селекторе xpath, который не может найти элементыЯ запрашиваю в DOM.

Чтобы убедиться, что у меня есть правильный xpath и дважды проверьте его, я также использую Xpath Helper из хрома (расширение).

Моя функция, которую я пытаюсь использоватьэто:

/**
 * @Then I login
 */
public function login()
{
    $page = $this->getSession()->getPage();

    $username = $page->find('xpath', "//*[@id='inputEmail']/self::INPUT");
    $password = $page->find('xpath', "//*[@id='inputPassword']/self::INPUT");

    if ($username == null && $password == null) {
       echo "nothing found";
    }
    else{
        $username->setValue('username');
        $password->setValue('password');
    }
}

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

Я предполагаю, что это угловая проблема с тем, как он создает элементы DOM, из-за чего мой xpath не может найти нужные мне поля, но я могу 'Не думаю, что обойти это.

Конечно, использование JS-фреймворка, такого как Protractor, может быть решением, но я бы хотел остаться в php, так как он легче обслуживается командой, с которой я работаю.

Любые идеибудет более чем приветствоваться.

1 Ответ

0 голосов
/ 27 марта 2019

Несколько идей:

  1. Используйте объекты страницы для очистки вашего кода
  2. Убедитесь, что элемент присутствует, прежде чем использовать его, дождавшись его (find () может вернуть ноль или элемент)
  3. Если вам не нужен пользовательский интерфейс, используйте жадность или какой-нибудь драйвер без головы
  4. Попробуйте создать условие ожидания, специфичное для углового, если вы используете пользовательский интерфейс
...