如果所有元素xpath都相同,如何区分元素

时间:2014-02-12 13:24:58

标签: java xml selenium xpath selenium-webdriver

使用selenium web驱动程序自动化测试,在我们的应用程序中元素(3个输入字段)xpath是相同的,所以我无法在那三个字段中传递值,请找到html

<div class="form-row">
<div class="label-column">
Pan No
</div>
<div class="ctrl-column">
<input class="input-txt" type="text" maxlength="50" data-bind="value: Pan No,qtipValMessage: Pan No" title="">
</div>
</div>
<div class="form-row">
<div class="label-column"> area code </div>
<div class="ctrl-column">
<input class="input-txt" type="text" maxlength="50" data-bind="value: area code,  qtipValMessage: area code" title="">
</div>
</div>
<div class="form-row">
<div class="label-column"> Serial # </div>
<div class="ctrl-column">
<input class="input-txt" type="text" maxlength="50" data-bind="value: Serial #" title="">
</div>

上面的html有三个输入字段(Pan No,区号和Serial#) 我想通过我们的java代码(selenium web driver)

传递一个值
driver.findElement(By.cssSelector("input.input-txt")).sendKeys(
            "acdpp6042c);

如果我执行上面的那个填充pan no字段,这不是概率,但其余的字段无法传递值,因为两个元素标记都相同, 请建议如何为其余字段生成xpath

来自开发人员工具(chrome)xpath是:

//*[@id="divInfo"]/table/tbody/tr/td/div[2]/table/tbody/tr/td[1]/div/div[2]/div[2]/input

以上其他字段

是常见的

3 个答案:

答案 0 :(得分:1)

怎么样

//input[contains(@data-bind, "Serial")]

//input[contains(@data-bind, "area code")]

//input[contains(@data-bind, "Pan No")]

答案 1 :(得分:1)

如果您更喜欢cssSelectors,以下内容将有效。

css = input[data-bind*='Pan']

css = input[data-bind*='area code']

css = input[data-bind*='Serial']

符号 * 与xpath中的包含相同。

答案 2 :(得分:0)

使用findElements(带有“s”)。我使用Selenium的Python绑定并且很少编写Java代码(所以下面可能包含错误)但是我想象的是:

List<WebElement> els = driver.findElements(By.cssSelector("input.input-txt"));
els.get(0).sendKeys("acdpp6042c);
els.get(1)... // Do something with the second.
els.get(2)... // Do something with the third.