如何点击不同场景中id值正在变化的文本字段“Quantity”

时间:2014-01-06 10:39:41

标签: testing selenium selenium-webdriver

 <div id="div_12_1_1_1_3_1_2_1_1_1_2" class="Quantity CoachView CoachView_show" data-eventid="" data-viewid="qty" data-config="config12" data-bindingtype="Decimal" data-binding="local.priceBreak.quantity" data-type="com.ibm.bpm.coach.Snapshot_a30ea40f_cb24_4729_a02e_25dc8e12dcab.Quantity">
<div class="w-decimal w-group clearfix">
<div class="p-label-container span4">
<div class="p-fields-container controls-row span8 l-input fixed-units">
<input id="div_12_1_1_1_3_1_2_1_1_1_2-in" class="p-field span8" type="text" maxlength="16">
 <input id="div_12_1_1_1_3_1_2_1_1_1_2-iu" class="p-unit span4" type="text" maxlength="2" style="display: none;">
<select class="p-unit span4" style="display: none;"></select>
<div class="p-unit span4">CM</div>
<div class="p-help-block"></div>
</div>
<div class="p-fields-container span8 l-output" style="display: none;">
</div>
</div>
<div id="div_12_1_1_1_3_1_2_1_1_1_3" class="Quantity CoachView CoachView_show"         data-eventid="" data-viewid="Quantity2" data-config="config73" data-bindingtype="Integer" data-binding="local.priceBreak.numberDeliveries" data-type="com.ibm.bpm.coach.Snapshot_a30ea40f_cb24_4729_a02e_25dc8e12dcab.Quantity">

此处如何点击其ID为“div_12_1_1_1_3_1_2_1_1_1_2-in”的文本框 但在某些情况下,它会更改为“div_5_1_1_1_3_1_2_1_1_1_2-in”

我尝试了以下内容,

driver.findElement(By.xpath("//div/input[ends-with(@id,'__1_1_1_3_1_2_1_1_1_2-in')]")).sendKeys("98989998989");

但它不起作用..

输出:

org.openqa.selenium.InvalidSelectorException:给定的选择器// div / input [ends-with(@ id,'__ 1_1_1_3_1_2_1_1_1_2-in')]无效或不会产生WebElement。发生以下错误: InvalidSelectorError:由于以下错误,无法找到具有xpath表达式// div / input [ends-with(@ id,'__ 1_1_1_3_1_2_1_1_1_2-in')]的元素: [例外......“表达不是法律表达。”代码:“51”nsresult:“0x805b0033(NS_ERROR_DOM_INVALID_EXPRESSION_ERR)”位置:“file:/// C:/Users/SUNIL~1.WAL/AppData/Local/Temp/anonymous4157273428687139624webdriver-profile/extensions/fxdriver@googlecode.com/ components / driver_component.js行:5956“] 命令持续时间或超时:41毫秒 有关此错误的文档,请访问:http://seleniumhq.org/exceptions/invalid_selector_exception.html 构建信息:版本:'2.37.0',修订版:'a7c61cb',时间:'2013-10-18 17:15:02'

4 个答案:

答案 0 :(得分:0)

您可以尝试使用以下cssSelector,

driver.findElement(By.cssSelector("div.fixed-units > input[id$='in']")).sendKeys("98989998989");

答案 1 :(得分:0)

如果'in'文本总是存在,那么你可以使用xpath。您可以尝试// div [contains(@ id,'in')]

答案 2 :(得分:0)

ends-with是一个 XPath 2 查询,其中五个主要actually support v2

您可以选择使用已建议的其他方法,也可以使用可以使用的XPath 1解决方案:

//div/input[substring(@id, string-length(@id) - 22) = '_1_1_1_3_1_2_1_1_1_2-in']

虽然这很难看,但是真的。

答案 3 :(得分:0)

我实际上使用了“start-with”......但我发现你有多个以“div”开头。

如果您的元素都保留在页面上的相同位置且无法更改,请尝试此操作。这是一些Java代码:

By by = By.xpath("(//*[starts-with(@" + attributeName + ", '" + attributeValue + "')])[" + n + "]");

在您的情况下,它看起来像这样:

By by = By.xpath("(//*[starts-with(@id, 'div')])[2]");

这样做会选择DOM中以“div”开头的第二个元素。

这有点像黑客......但它可能对你有用。