如何使用selenium clj-webdriver比较每个查询的值

时间:2016-10-25 02:17:21

标签: selenium selenium-webdriver clojure

我想使用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>

1 个答案:

答案 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访问它。这将允许您使用页面而无需回复整个场景以进入测试页面。

您可以在many online tutorials中阅读有关CSS和XPath查询的更多信息。