5

Webdriverで要素を見つけるときに可能な限りXPathの使用を避けたいが、すでに見つかった要素から子要素を参照できるようにしたい.

次の html の場合:

<div id="myelement">
    <table class="myclass">
       <tbody>
           <tr>
               <td>something</td>
               <td>
                   <table>
                       <tbody>
                           ...
                       </tbody>
                   </table>
               </td>
           </tr>
           <tr>
               ...
           </tr>
       </tbody>
    </table>
</div>

CSS式があります:

driver.find_elements('div#myelement table.myclass > tbody > tr')

テーブル式を参照しなくても、これをテーブル要素と行に分割したいと考えています。たとえば、XPath の場合:

table = driver.find_element(:xpath, "//div[@id='myelement']//table[@classname='myclass']")

rows = table.find_elements(:xpath, 'tbody/tr')

JQuery $('div#myelement table.myclass').find('> tbody > tr') を使用して動作する次のことを試しました

table = driver.find_element(:css, 'div#myelement table.myclass')

rows = table.find_elements(:css, '> tbody > tr')

これにより、エラー `assert_ok' が発生します: 無効または不正な文字列が指定されました (Selenium::WebDriver::Error::UnknownError)

もちろん、最初の「>」を削除しても機能しますが、直系の子だけでなく、子孫の tbody が選択されることを意味します。

cssだけを使用してこれを正しく行うにはどうすればよいですか?

4

1 に答える 1

5

あなたはページのURLを与えていないので、私はこの中国語classを取りました.今、 nameを持つ最初のテーブルの2番目の行のテーブル列の値を見つけようとしました"wikitable sortable.

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://en.wikipedia.org/wiki/Chinese_language"

table = driver.find_element(:css,"table.wikitable") # !> assigned but unused variable - table
tb_col = driver.find_elements(:css,"tr:nth-of-type(2)>td")
tb_col[0..5].each{|e| p e.text}
# >> "汉语/漢語 or 中文\nHànyǔ or Zhōngwén"
# >> "汉语"
# >> "中文"
# >> "Wu\nNotes: includes Shanghainese"
# >> "Wu; 吴/吳"
# >> "Wúyǔ"

あなたが試した方法table.find_elements(:css, '> tbody > tr')は有効な css 構文ではありませんselenium-webdriver。次のtable.find_elements(:css, 'tbody > tr')ように書くことをお勧めします。

table = driver.find_element(:css, 'div#myelement table.myclass>tbody')
rows = table.find_elements(:css, 'tr')

またはjsfiddle

table = driver.find_element(:css, 'div#myelement table.myclass')
rows = table.find_elements(:css, 'tbody:nth-of-type(1) > tr')
于 2013-08-25T14:31:35.993 に答える