2017-03-17 70 views
0

问题:如何从表列中找到值,并根据该值如何选择相邻的复选框。如何处理使用Web驱动程序动态生成值的表?

描述:该表由8栏组成。第一列(列名是'选择')由复选框组成。在最后一列(列名是'金额') 我们有金额。当相邻金额栏由数值(比方说)3380组成时,我想让网络驱动程序点击复选框。如果特定金额存在于金额部分,则点击与该金额行相关的复选框。

enter image description here

备注:这些值本质上是动态的。

HTML代码:

<table width="760" cellspacing="0" cellpadding="0" background="../images/bground_title_row.gif" height="25"> 
<tr valign="top"><td> 
<table width="760" align="center" cellpadding="0" cellspacing="1"> 
<div align="center"><span class="noninputtextfields">Select</span></div> 
<td height="25" width="50"><div align="center"><span class="noninputtextfields">Select</span></div></td> 
<td height="25" width="50">&nbsp;<span class="noninputtextfields">Date</span></td> 
<td height="25" width="150">&nbsp;<span class="noninputtextfields">Handler</span></td>   
<td height="25" width="100">&nbsp;<span class="noninputtextfields">Payee</span></td> 
<td height="25" width="50" valign="center" nowrap="">&nbsp;<span class="noninputtextfields">Ind</span></td> 
<td height="25" width="210" valign="center">&nbsp;<span class="noninputtextfields">Claim/Claimant</span></td> 
<td height="25" width="100">&nbsp;<span class="noninputtextfields">Insured</span></td> 
<td height="25" width="50"><div align="right"><span class="noninputtextfields">Amount €</span>&nbsp;</div></td> 
</tr> 

<tr> 
<td><input type="checkbox" name="bulk_CHKpayment" value="0" onclick="this.checked=false;></td> 
<td height="25" nowrap="">&nbsp;<span class="inputtextfields">01/03/2017 08:40:41</span></td> 
<td height="25">&nbsp;<span class="inputtextfields">Peter Collins </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">FirstName </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">N </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">FL </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">FirstName</span></td> 
<td><div align="right"><span class="inputtextfields">5045.17&nbsp;</span></div></td> 
</tr> 

<tr> 
<td><input type="checkbox" name="bulk_CHKpayment" value="0" onclick="this.checked=false;></td> 
<td height="25" nowrap="">&nbsp;<span class="inputtextfields">01/03/2017 08:40:41</span></td> 
<td height="25">&nbsp;<span class="inputtextfields">David Dessy </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">FirstName </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">N </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">FL </span></td> 
<td height="25">&nbsp;<span class="inputtextfields">FirstName</span></td> 
<td><div align="right"><span class="inputtextfields">1000&nbsp;</span></div></td> 
<tr> 
. 
. 
. 
</table> 
+0

我不能找到价值100000,任何复选框,你可以分享这些复选框,周围那几个(2-5)行的代码,并删除不必要的代码? –

+0

请访问:http://tinypic.com/r/987b61/9 – Akki

+0

我只想选择复选框,如果金额栏的值等于100000 – Akki

回答

1

关闭我的头顶,我会尝试

topElement = driver.findElement(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody")); 

List<WebElement> potentialElements = topElement.findElements(By.xpath("//*[contains(@value,'100000')]")); 

if (potentialElements.size() > 0) { 
    //You have caught your fish 
} 

这是更有效的让硒做搜索,一旦找到与每个元素并在循环中测试它的值。

编辑

问题陈述:我想选择“选择”列中的复选框,如果有一个“amount'which等于在相关的10万‘量’一栏。

public void checkPaymentItemsEqualTo100k() throws InterruptedException{ 
    topElement = driver.findElement(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody")); 
    List<WebElement> potentialElements = topElement.findElements(By.xpath("//*[contains(@value,'100000')]")); 

    if (potentialElements.size() > 0) { 
     for (WebElement x: potentialElements) { 

      WebElement grandParent = x.findElement(By.xpath("/../../.."); 
      WebElement wElement = grandParent.findElement(By.xpath("/td[1]/div/input[@name='bulk_CHKpayment'])[1]")); 
      if(wElement.getAttribute("onclick") == null){ 
       JavascriptExecutor executor = (JavascriptExecutor) driver; 
       executor.executeScript ("arguments[0].click();" , wElement); 
       Log.info("Payment Item equal to 100k Amount is available"); 
       sleepResponsibly(2000); 
      } 
     } 
    } 
} 

public void sleepResponsibly(int timeMillisecond){ 
    try{ 
     Thread.sleep(timeMillisecond); 
    } catch (InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
     throw new RuntimeException(ex); 
    } 
} 

警告:我没有测试过这个。

+0

感谢您的答案。你能为我写一个完整的函数吗?我有点困惑。 – Akki

+0

如果你必须睡觉,然后负责任地睡觉。 – MikeJRamsey56

+0

爷爷奶奶在这里做什么? – Akki

0

它更容易做xpath。 实际的Xpath可能会有所不同,因为我没有更改测试。但想法是你找到与文本匹配的TD,然后转到父元素,这是ROW,然后第一个TD然后输入。

public void selectValue(String value){ 
    String xpath = "//td[contains(text(),'"+value+"')]/../td[1]/input"; 
    WebElement checkbox = driver.findElement(By.xpath(xpath)); 
    checkbox.click(); 

} 
相关问题