Как сравнить значения каждого запроса с помощью selenium clj-webdriver

#selenium #selenium-webdriver #clojure

#селен #selenium-webdriver #clojure

Вопрос:

Я хочу сравнить значения каждого запроса с помощью clj-webdriver . Каждый Из всех запросов имеет один и тот же класс.

Для первого запроса, чтобы проверить, совпадает ли значение, я использовал

 (is (= "2" (text ".class")))
  

Но что мне делать, чтобы сравнить все значения запроса, которые имеют один и тот же класс.

Если предположить, что вопросы

 What is your favourite number?    2
what is your shoe size?           3
  

Например, 10 вопросов, имеющих один и тот же класс. Пожалуйста, помогите мне, как сравнить все запросы, имеющие один и тот же класс.

HTML-код является:

 <tr data-toggle="coll" href="#623">
    <td class="desc">...</td>
    <td class="foo">
    <span class="fav number">
    <sup class="number number">
    2
    </sup>
    "
    /
    "
    <sub>
    2
    </sub>
    </span>
    </td>
    </tr>
 <tr data-toggle="coll" href="#625">
    <td class="desc">...</td>
    <td class="foo">
    <span class="shoe size">
    <sup class="size number">
    3
    </sup>
    "
    /
    "
    <sub>
    3
    </sub>
    </span>
    </td>
    </tr>
  

Комментарии:

1. Вы проверили подходящие CSS-селекторы? ( w3.org/TR/css3-selectors/#selectors )

2. @PiotrekBzdyl не совсем понимаю. Можете ли вы привести пример того, что использовать

3. Пожалуйста, сначала исправьте свой вопрос — трудно понять, что вам нужно. В одном предложении вы пишете «Но что мне делать, чтобы сравнить все значения запроса, которые имеют разные классы «, а в другом «как сравнить все запросы, имеющие один и тот же класс «. Пожалуйста, предоставьте фрагмент HTML, с которым вы работаете.

4. @PiotrekBzdyl Извините, это тот же класс

5. не могли бы вы, пожалуйста, обновить свой вопрос тогда? И включить фрагмент HTML со страницы, которую вы хотите протестировать?

Ответ №1:

Я не уверен, есть ли у вас контроль над тестируемым HTML-кодом. Если вы это сделаете, я настоятельно рекомендую изменить его, чтобы у вас были стабильные идентификаторы, сгенерированные для тестируемых элементов, чтобы вы могли легко идентифицировать их в своих тестах:

 <div id="shoe-size-answer">40</div>
  

Тогда ваши тесты будут такими же простыми, как:

 (is (text "#shoe-size-answer") "40"))`
  

С IDS вам не нужно знать структуру вашего HTML-документа, и ваши тесты не будут прерываться при изменении порядка частей вашей страницы (и ваши IDS не изменятся).

Вы также можете использовать некоторые фиктивные классы CSS для обозначения некоторых разделов вашего HTML и навигации по вложенным частям вашей страницы, используя их:

 <div class="a1">
  <div class="b1">
    a1b1
  </div>
  <div class="b2">
    a1b2
  </div>
</div>
<div class="a2">
  <div class="b1">
    a2b1
  </div>
  <div class="b2">
    a2b2
  </div>
</div>
  

Затем вы можете указывать запросы, используя CSS-пути:

 (is (text {:css ".a1 .b1"}) "a1b1")
(is (text {:css ".a2 .b1"}) "a2b1")
  

И, наконец, для меня самый простой способ правильно выполнить мои запросы — поэкспериментировать с REPL. Просто запустите свой REPL с зависимостями вашего проекта от classpath и попробуйте:

 (require '[clj-webdriver.taxi :as taxi])

(taxi/set-driver! {:browser :chrome})

(taxi/to "http://localhost:8000/index.html")

(taxi/find-element {:css ".a1 .b1"})
;; => #clj_webdriver.element.Element{:webelement #<Tag: <div>, Text: a1b1, Class: b1, Object: [[...] -> css selector: .a1 .b1]>}

(taxi/text {:css ".a1 .b1"})
;; => "a1b1"
  

Вы даже можете сохранить свою тестируемую страницу в виде статического HTML-файла и из каталога, в котором она сохранена, запустить следующее, чтобы запустить базовый HTTP-сервер (на вашем компьютере должен быть установлен Python):

 python -m SimpleHTTPServer 8080
  

(где 8080 — порт сервера) и получить к нему доступ по http://localhost:8080. Это позволит вам поиграть со страницей без необходимости отвечать на весь сценарий, чтобы перейти к тестируемой странице.

Вы могли бы прочитать больше о запросах CSS и XPath во многих онлайн руководствах.