如何在网表上的不同行上单击特定于其列名的按钮

时间:2013-05-20 06:47:16

标签: java selenium automated-tests selenium-webdriver

如何使用selenium webdriver在网表上的不同行中使用Column1中的特定名称单击“添加”按钮。

网表如

Row 1|column1| Column2| Add Button
Row 2|column1| Column2| Add Button
Row 3|column1| Column2| Add Button
Row 4|column1| Column2| Add Button

我添加了一些用户,现在我想点击添加按钮,具体取决于用户名,用户名可能会有所不同,所以我想将名称存储在arraylist中,然后根据存储的名称想要点击添加按钮,为该特定用户输入一些细节。

2 个答案:

答案 0 :(得分:0)

抱歉,我对JAVA不够好。但是遵循逻辑将帮助您编写Java代码:

table = driver.find_element(:id, "table_id")
rows = table.find_elements(:tag_name, "tr")
len = rows.length 

len.times do |i|
    if table.find_element(:xpath, "//tr[#{i+1}]/td[2]/div").text.eql? "expected_text"
        table.find_element(:xpath, "//tr[#{i+1}]/td[4]/div").click
    end
end

这是一个Java代码(可能在语法上不正确)。试试吧:

WebElement table = driver.findElement(By.id("table_id"));
// WebElement table = driver.findElement(By.xpath("//table[@class="jtable"]"));  (for your case)
List<WebElement> rows = table.findElements(By.tagName("tr"));

for(int i=0; i<rows.length(); i++ ){
    if(table.findElement(By.xpath("//tr[#{i+1}]/td[2]/div").getText == "expected_text"){
       table.findElement(By.xpath("//tr[#{i+1}]/td[4]/div")).click();
    }
}

答案 1 :(得分:0)

更简单的方法:

WebElement table = driver.findElement(By.cssSelector("table.jtable"));
List<WebElement> rows = table.findElements(By.tagName("tr"));

for (WebElement row : rows) {
  if(row.findElement(By.cssSelector("td:nth-child(2)")).getText().equals("expected name"))
  row.findElement(By.cssSelector("td:last-child input")).click();
}

Take a look here to see how cssSelector works with my exemple.

PS:如果你想比较2个字符串,你必须使用.equals()而不是==