Выберите несколько строк из таблицы, используя Selenium in ruby

I'm writing script to automate test where I've to select multiple rows from table & apply some settings to those rows (by selecting them in a group). For that, I'll have to select multiple rows from table, but I'm not able to select those rows using Selenium.

Я попробовал это, используя следующий код (CTRL + выбрать строки), но он не работает -

$driver.action.key_down(:control).perform
$driver.find_element(:xpath, ".//*[@id='1']/div/div/table/tbody/tr[1]").click
$driver.find_element(:xpath, ".//*[@id='2']/div/div/table/tbody/tr[2]").click
$driver.find_element(:xpath, ".//*[@id='3']/div/div/table/tbody/tr[3]").click

Ниже приведены веб-содержимое -

<div id="abc" class="unselectable dataTable" emptylineuptext="Lineup is Empty" ...>
  <div class="xyz">
    <div class="def" style="min-height: 3024px;">
      <table class="buffer" style="margin-top: 0px;">
       <tbody>
        <tr id="1" draggable="true">
        <td>
        <td>NA</td>
        </td>   
        </tr>

        <tr id="2" draggable="true">
        <td>
        <td>NA</td>
        </td>   
        </tr>

        <tr id="3" draggable="true">
        <td>
        <td>NA</td>
        </td>   
        </tr>

        <tr>
        .
        .
        .
        </tr>
    </tbody>
  </table>
</div>

Manually, I can select multiple rows from table. Could someone please tell me the solution?

0
nl ja de

2 ответы

Попробуйте что-нибудь подобное.

$driver.action.key_down(:control).click("1st row").click("2nd row")..key_up(:control).perform

P.S: Я мало знаю о связываниях selenium python. Надеюсь, что над логикой вы получите представление.

0
добавлено

Похоже, может быть ошибка с вашими выражениями Xpath. Мне кажется, что они ожидают элемент с идентификатором «1», «2» или «3» в верхней части иерархии, содержащей два div, затем таблицу и т. Д. Я думаю, что есть более простой способ построить как Xpath, так и Ruby-код.

Xpath

First, you'll want to get a single Xpath that's robust enough to select multiple table rows. I'm not sure if it's necessary to select the <tr> both by numerical position and by ID, but you can make this work either way. I don't know what kind of range you want, but you can modify either of these two Xpaths to get the range you want:

Select by ID

//div/div/table/tbody/tr[@id>0 and @id<4]

Select by Position

//div/div/table/tbody/tr[position()>0 and position()<4]

Ruby Code

The next thing you'll need to do is create an array with all of the elements you want. The same way you can declare a value to act as a browser element in Selenium, you can declare an array to contain multiple values each corresponding to a browser element. That is:

foo = $driver.find_element(:Xpath, "//div/div/table/tbody/tr[1]/td[2]")
foo.text

would be the same as using just one element of an array, bar:

bar[0] = $driver.find_element(:Xpath, "//div/div/table/tbody/tr[1]/td[2]")
bar[0].text

Both of these would return "NA" using your sample page above.

Now you just need to grab all the elements together, and then click on each one in turn with an "each" iterator. You can use .find_elements for this - it works just the same as .find_element, but returns all possible matches from the page as an array. Like this:

foo = $driver.find_elements(:Xpath, "//div/div/table/tbody/tr[@id>0 and @id<4]")
foo.each do |element|
  element.click
end

Hope this helps!

0
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков