私はorderとsearchValueが必須のパラメータであり、actionとbuttonNameはオプションです。私は検索を実行した後、この機能を使用しています。この機能により、ユーザーはパラメータに基づいてさまざまなことを行うことができます。たとえば、チェックボックスをクリックすると(行のどこにでもあります)、開いているボタンをクリックします(行のどこでも)。Selenium Python与えられたパラメータに基づいてテーブル行からテーブルデータを選択します
ここにはtr (3つの結果復帰後)のようになります。これは私がWRコードの一部である
(TDは、チェックボックス、ボタンなどすることができます)TR内側TDここ
をしています私はそれをより良い方法で書くことができるかどうかを知りたがったり、xpathパスを何度も定義する必要はありません。
ここで、ユーザーはorder(FirstまたはLast(tr))とsearchValueを定義し、そのテキストでtdを検索し、同じtr(順序に応じて)でアクションを実行します。
def listView(self, order, searchValue, action=False, buttonName=False):
if order = 'First':
#self.find_element("//*[starts-with(@id,'table_')]/tbody/tr")
self.find_element('//*[starts-with(@id,"table_")]/tbody/tr[1]/td[text()= "'+ searchValue +'"]')
if action == "Link":
self.click(10, "//*[starts-with(@id,'table_')]/tbody/tr[1]")
elif action == "Checkbox":
self.click(10, '//*[starts-with(@id,"table_")]/tbody/tr[1]/td/input[@type="checkbox"]')
elif action == "Button" and buttonName:
self.click(10, '//*[starts-with(@id,"table_")]/tbody/tr[1]/td/input[@type="Button"]/@value["'+ buttonName +'"]')
else:
raise Exception("Invalid value for action parameter")
elif order = 'Last':
self.find_element('//*[starts-with(@id,"table_")]/tbody/tr[last()]/td[text()= "'+ searchValue +'"]')
if action == "Link":
self.click(10, "//*[starts-with(@id,'table_')]/tbody/tr[last()]")
elif action == "Checkbox":
self.click(10, '//*[starts-with(@id,"table_")]/tbody/tr[last()]/td/input[@type="checkbox"]')
elif action == "Button" and buttonName:
self.click(10, '//*[starts-with(@id,"table_")]/tbody/tr[last()]/td/input[@type="Button"]/@value["'+ buttonName +'"]')
else:
raise Exception("Invalid value for action parameter")
else:
raise Exception("Invalid value for order parameter")
偉大これがそうですずっときれい。すごく感謝します。 – user7242550
ちょうど最後の質問、私はパラメータを使用してxpathを書いた方法 - '/ * [開始 - with(@id、 "テーブル_")]/tbody/tr [1]/td/input [@ type = "ボタン "]/@値[" '+ボタン名+']]をクリックします。これは良い方法ではありませんか? – user7242550
@ user7242550ええ、ボタンを "value"属性で照合したいのであれば、これは正しい方法ではありません。ありがとう。 – alecxe