автоматизация тестирования веб-интерфейса с использованием etaoin и Clojure, как заполнить / найти относительные элементы? - PullRequest
0 голосов
/ 16 ноября 2018

В html-странице содержится тег ввода и тег метки, я нахожу тег метки, используя его текст и, используя его, хочу найти и заполнить тег ввода.

например,

<div class="el-form-item is-error is-required">
  <label for="address.streetAddress.text" class="el-form-item__label">
    Specify your shipping address
  </label>
  <div class="el-form-item__content">
    <input type="text" autocomplete="off" required="required" placeholder="" class="el-input__inner">
  </div>
</div>

Из etaoin docs,

(query driver {:fn/has-text "Specify your shipping address"})

Выше кода дает мне элемент метки, с помощью которого я хочу заполнить входное значение.

Я не знаю, как другие фреймворки любятСелен решает эту проблему.

Также я не могу использовать какие-либо атрибуты css для поиска тега ввода.

Любая помощь будет оценена

1 Ответ

0 голосов
/ 16 ноября 2018

Я не знаю, как это сделать в etaoin, но использование может использовать библиотеку Forest для манипулирования простым hiccup / html, если это поможет.

(with-debug-hid
    (with-forest (new-forest)
      (let [root-hid        (add-tree-hiccup
                              [:div {:class :some-div-1}
                               [:div {:class :some-div-2}
                                [:label "Some Junk"]
                                [:div {:class :some-div-3}
                                 [:label "Specify your shipping address"]
                                 [:div {:class :some-div-4}
                                  [:input {:type        "text" :autocomplete "off" :required "required"
                                           :placeholder "" :class "el-input__inner"}]]]]])

Мы хотим найти узел: input в том же элементе: div, что и узел: label с текстом «Укажите адрес доставки». Затем мы находим его родителя и используем его как начало нового поиска для нужного: входного узла:

label-path                   (only (find-paths root-hid [:** {:tag :label :value "Specify your shipping address"}]))
parent-div-hid               (-> label-path reverse second)
shipping-address-input-hid   (find-hid parent-div-hid [:div :div :input])

Юнит-тест показывает, что он работает:

(is= label-path [:0006 :0005 :0004 :0001])
(is= parent-div-hid :0004)
(is= (hid->hiccup shipping-address-input-hid)
  [:input {:type        "text", :autocomplete "off", :required "required",
           :placeholder "", :class "el-input__inner"}])
(value-set shipping-address-input-hid "1234 Main St")
(is= (hid->hiccup shipping-address-input-hid)
  [:input {:type         "text", :autocomplete "off", :required     "required",
           :placeholder  "", :class        "el-input__inner"}
   "1234 Main St"])

Мы можем вывести окончательно измененное дерево:

(hid->hiccup root-hid) =>
    [:div
     {:class :some-div-1}
     [:div
      {:class :some-div-2}
      [:label "Some Junk"]
      [:div
       {:class :some-div-3}
       [:label "Specify your shipping address"]
       [:div
        {:class :some-div-4}
        [:input
         {:type "text",
          :autocomplete "off",
          :required "required",
          :placeholder "",
          :class "el-input__inner"}
         "1234 Main St"]]]]]

Вы также можете увидеть молниеносный разговор от Clojure Conj 2017.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...