2013-04-03 3 views
0

Я автоматизирую задачу с использованием Java и Selenium.Как установить флажок в первом столбце на основе значения во втором столбце таблицы?

Я хочу установить флажок (который находится в первом столбце таблицы) в зависимости от того, соответствует ли значение во втором столбце моему входному значению. Например, в следующем фрагменте кода значение «Магнус» соответствует моему входному значению, поэтому я хочу установить связанный с ним флажок.

<table class="cuesTableBg" width="100%" cellspacing="0" border="0" summary="Find List Table Result"> 
    <tbody> 
     <tr class="cuesTableBg"> 
     <tr class="cuesTableRowEven"> 
     <tr class="cuesTableRowOdd"> 
      <td align="center"> 
       <input class="content-nogroove" type="checkbox" name="result[1].chked" value="true"> 
       <input type="hidden" value="1c62dd7a-097a-d318-df13-75de31f54cb9" name="result[1].col[0].stringVal"> 
       <input type="hidden" value="Magnus" name="result[1].col[1].stringVal"> 
      </td> 
      <td align="left"> 
       <a class="cuesTextLink" href="userEdit.do?key=1c62dd7a-097a-d318-df13-75de31f54cb9">Magnus</a> 
      </td> 
      <td align="left"></td> 
      <td align="left">Carlsen</td> 
      <td align="left"></td> 
     </tr> 
     <tr class="cuesTableRowEven"> 
    </tbody> 
</table> 

Но я не могу этого сделать. В приведенном выше случае, следующие две строки служат цели (как мой входное значение совпадает с этим во втором ряду):

WebElement checkbox = driver.findElement(By.xpath("//input[@type = 'checkbox' and @name = 'result[1].chked']")); 
checkbox.click(); 

Но она не может быть использована в качестве требуемого значения может не всегда быть в второй ряд.

Я попытался следующий блок кода, но безрезультатно:

List<WebElement> rows = driver.findElements(By.xpath("//table[@summary = 'Find List Table Result']//tr")); 
for (WebElement row : rows) { 
    WebElement userID = row.findElement(By.xpath(".//td[1]")); 
    if(userID.getText() == "Magnus") { 
     WebElement checkbox = row.findElement(By.xpath(".//input[@type = 'checkbox']")); 
     checkbox.click(); 
     break; 
    } 
} 

Для чего это стоит, XPath текста во второй колонке:

/html/body[@id='mainbody']/table/tbody/tr/td/div[@id='contentautoscroll']/form/table[2]/tbody/tr[3]/td[2]/a 

Я не знаю, о CSS Selectors. Это поможет здесь?

+0

Да, CSS селекторы должны помочь вам :) – plsgogame

ответ

1

Если вы знаете значение входного уже вы просто использовать ниже XPath, чтобы выбрать уважаемой checkbox

"//a[text(),'Magnus']/parent::td/preceding-sibling::td/input[@type='checkbox']" 

Update:

"//a[text()='Magnus']/parent::td/preceding-sibling::td/input[@type='checkbox']" 
+0

Вы можете вызвать метод findElement для WebElement. Это абсолютно нормально. Это также упоминается в общей ссылке. См. Третий метод в «Резюме метода». – Waltz

+0

Извините за неправильную информацию. Я уточню свой ответ, чтобы не вводить в заблуждение любого другого пользователя. Большое вам спасибо за указание на мою ошибку. – Santoshsarma

+0

вы пробовали выше xpath, чтобы получить доступ к этому флажку на основе значения? – Santoshsarma

0

При сравнении двух строк equals следует использовать вместо ==

Заменить

if(userID.getText() == "Magnus") 

с

String check1 = userID.getText(); 
if(check1.equals("Magnus") 
+0

Спасибо за указание на это, но акцент здесь делается на проблеме флажок. После того, как вы сможете сопоставить текст во втором столбце с нужным значением, я должен установить флажок в первом столбце той же строки. Я не могу этого сделать. Это главная проблема! – Waltz

+0

Сообщите мне веб-сайт, который вы тестируете, если он не является конфиденциальным, поэтому я могу вам помочь. – Hemanth

+0

К сожалению, сайт доступен только внутри страны. Я добавил XPath одного из элементов. Надеюсь, поможет. – Waltz

0

Похоже, это была глупая ошибка с моей стороны. Следующий фрагмент кода, довольно простой, работал.

List<WebElement> rows = driver.findElements(By.xpath("//table[@class='cuesTableBg']//tr")); 

for (WebElement row : rows) { 
    WebElement secondColumn = row.findElement(By.xpath(".//td[2]")); 
    if(secondColumn.getText().equals("Magnus")) { 
     WebElement checkbox = row.findElement(By.xpath(".//td[1]/input")); 
     checkbox.click(); 
     break;  
    } 
} 
Смежные вопросы