#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 во многих онлайн руководствах.