我想使用clj-webdriver
比较每个查询的值。每个All查询都有相同的类。
对于测试值是否相同的第一个查询,我使用了
(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>
答案 0 :(得分:0)
我不确定您是否可以控制正在测试的HTML。如果您这样做,我强烈建议您修改它,以便为测试元素生成稳定的ID,以便您可以在测试中轻松识别它们:
<div id="shoe-size-answer">40</div>
然后您的测试将如此简单:
(is (text "#shoe-size-answer") "40"))`
使用ID,您不需要知道HTML文档的结构,并且当您重新排列页面的某些部分时,您的测试不会中断(并且您的ID不会更改)。
您还可以使用一些虚拟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,然后尝试:
(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访问它。这将允许您使用页面而无需回复整个场景以进入测试页面。