2012-03-15 113 views
1

在Java类中使用Selenium WebDriver,我尝试查找特定元素,然后在输入字段中自动添加所需的元素数量。查找在Selenium WebDriver中使用的HTML元素

我有一个HTML表格,每行指定一个元素类型和一个输入字段,用于将X添加到特定行中元素的数量。

<tr> 
    <td class="non-sortable-table"> 
    <input class="required text" type="text" value="0" name="plate_order{pageFlow.plateorders[0].numberOfPlates}" tabindex="25"> 
    </td> 
    <td class="non-sortable-table"> 
    <span>20% - White plates</span> 
    </td> 
    ... 
</tr> 

我试图在我的Java代码,以获得该元素的下面,但没有运气:

WebElement element = (WebElement) js.executeScript("return ${\"document.getElementsByName('plate_order{pageFlow.plateorders[0].numberOfPlates}')\""); 

WebElement element = driver.findElement(By.ByName('plate_order{pageFlow.plateorders[0].numberOfPlates}')) 

我怎么能retreive该元素以编辑它的输入? 元素的名称部分是否是对控制器的引用(即pageFlow)时有可能吗?

如果我想取回20%确定了以下元素....

我试图让一个使用XPath和cssSelector没有运气。 有什么建议吗?

+1

“// tr/td [@ class ='non-sortable-table'] [2]/span” – faramka 2012-03-15 13:53:36

回答

2

它看起来像我可能想要在XPath或CSS中使用启动类型运算符。

喜欢的东西:

XPath: //input[starts-with(@name, 'plate_order')] 
CSS: input[name^='plate_order'] 

类似的事情应该适用于跨度,太(如果你知道文):

XPath: //span[starts-with(., '20%')] 
CSS/Sizzle*: span:contains('20%') 

如果你不知道的文字,然后这个东西xpath可能工作。

XPath: //input[starts-with(@name, 'plate_order]/../../td/span 

* 包含函数不是纯CSS。这是Sizzle图书馆提供的补充。这可能会或可能不会工作,具体取决于Selenium是使用内置CSS库还是注入Sizzle。

+0

优雅,开始 - 正是我在这里所需要的。不过,我选择使用String [] elements = driver.findElement(By.xpath(“// table/tbody”))。getText().split(“\\ n”);'因为它是一个getText只会返回表tbody中每个元素的字符串。然后,我使用每一行来标识所下的订单。 – 2012-03-16 15:13:49

+0

Andy Tinkham的回答涵盖了xpath写得很好。谢谢安迪。当没有标签的id或名称时,我已经学会了如何编写xpath。 // span [starts-with(。,'20%')]:这对我很有帮助 – 2012-08-14 04:52:08

4

要从一个JavaScript结果返回一个元素,可以使用以下语法(我用jQuery的作为简化):

RenderedWebElement webElement = (RenderedWebElement) ((JavascriptExecutor) webDriver).executeScript("return jQuery('input[name^=plate_order]').get(0);"); 

还可以传递其previosly在硒中选择的元素:

((JavascriptExecutor) webDriver).executeScript("return doSomethingWithElement(arguments[0]);", webElement); 
相关问题