3

ソース スニペット:

<div>
<div class="checkbox checkbox-primary margin-bottom-5 margin-top-5">
<input id="item" name="item" type="checkbox" value="true"/>
<label for="item">Item_Text</label>
<input name="item" type="hidden" value="false"/>
</div>

次のコードでSplinterを使用して、このチェックボックスをクリックしようとしています:

browser.find_by_id('item')click()

find_by_name も試しました。どちらも次の例外を生成します。

(<class 'selenium.common.exceptions.ElementNotVisibleException'>, ElementNotVisibleException()

デバッグしようとしています:

print browser.is_element_present_by_id(item), browser.find_by_id(item).visible

True、False を返します

2 番目の入力ブロックに type='hidden' と表示されているため、Splinter がボックスをクリックするのに問題があるようです。ただし、 .first.click() を追加しても問題は解決せず、アイデアがありません。本当に単純なものが欠けているかもしれません!

4

3 に答える 3

2

次の JavaScript を実行すると、問題が修正されました。browser.execute_script('document.getElementsByName("%s")[0].checked=true' % item)

于 2015-05-21T09:33:50.243 に答える
0

チェックボックスの は一意であり、要素を正しく識別するためにより安全であるため、私は通常xpath、このような場合に使用します。ただし、 idが重複していないlabelことを確認する必要があります。これが、テスト用の ID を持つ主要な部分です。これを試して:Selenium

//label[contains(text(),'Item_Text')]/../input[@type='checkbox']

使用する

browser.find_by_xpath("//label[contains(text(),'Item_Text')]/../input[@type='checkbox']")

上記は、ラベルItem_Textに基づいて要素を見つける必要があります

編集

リストを取得してから、表示されているリストを検索してクリックしてみてください

elements = browser.find_by_xpath("//label[contains(text(),'Item_Text')]/../input[@type='checkbox']")
for element in elements:
    if element.is_displayed():
        element.click()
        break

Splinter 構文は少しずれている可能性があります。必要に応じてドキュメントを参照してください。

于 2015-05-21T01:39:11.250 に答える