0

「削除」リンクを表示するために、WebDriver をテーブル行の上に移動させようとしています。各行にはアイテム名を値として含む非表示の入力が含まれており、アイテム名はテストを書いている人に知られているため (ただし、それが表示される特定の行はそうではありません)、アイテム名を使用して行を見つけようとしています。

私の基本的な計画は、入力を見つけて、その祖先を探すことです。

Xpath と CSS の両方を試してみましたが、近づくことはできますが (入力を取得できます)、要素に戻ることができないようです。入力が非表示になっているため、単純にカーソルを合わせることができません。

これが私が持っているものです:

def delete_row_by_item_or_task_name(self, item_name=None, task_name=None):
    try:
        if item_name:
            name = item_name
            table_id = 'invoice-items'
        if task_name:
            name = task_name
            table_id = 'invoice-time'
        # tr = self.driver.find_element_by_css_selector("#" + table_id + " input[value=" + name + "]")

        tr = self.driver.find_element_by_xpath("//*[@id='" + table_id + "']/tbody/tr/td/div/div/input[contains(.,'" + name + "')]")
        import pdb; pdb.set_trace()
        self.hover(tr)
        self.driver.find_element_by_link_text('Delete line').click()

pdb をドロップして、変数 'td' が Web 要素であることを確認すると、CSS セレクターが機能します。しかし、前述したように、非表示の入力にカーソルを合わせることができず、/ancestor::tr を追加しようとすると、例外 (WebDriverException) が発生します。

/ancestor::tr の有無にかかわらず、Xpath によって NoSuchElement 例外が発生します。

必要な情報が不足している場合はお知らせください。詳細をお知らせいたします。

4

1 に答える 1

0

xpath に基づいて、HTML が次のようになっていると想定しています。

<table id="table_id">
    <tbody>
        <tr>
            <td>
                <div>
                    <div>
                        <input value="item_name" type="hidden" >
                    </div>
                </div>
            </td>
        </tr>
    </tbody>
</table>

値が「item_name」の入力を含む が必要<tr>な場合は、次の xpath を使用できます。

"//table[@id='" + table_id + "']/tbody/tr[./td/div/div/input[contains(@value, '" + name + "')]]"

これにより<tr>要素が直接返されるため、入力要素の祖先を見つける必要はありません。基本的に、これは「入力要素を含む tr を見つけてください」と言っています。

于 2012-09-11T02:25:59.697 に答える