2017-04-23 43 views
0

同じリソースIDを持つ複数の要素があります(これらはすべて同時に画面に表示されません)。そのため、それらの要素に含まれるテキストに基づいて選択する必要があります。ただし、テキストの一部が時折変更され、各要素について、小さな文字列のみが常に表示されます。では、必要なときに各要素を選択するにはどうすればよいですか?私が試した:特定のテキストを含むweb要素を選択

は残念ながら、それはブール値を返し、私はそれを「クリック」することはできません。

get_code = WebDriverWait(self.driver, 3).until(
    EC.text_to_be_present_in_element((By.ID, "android:id/big_text"), 'validation')) 
    element.click() 

これは通常、私の作品が、私は(テキストを()が含まれて含める必要があり、 「検証」)、私はこれを行う方法を見つけることができませんでした:

element = WebDriverWait(self.driver, 3).until(
    EC.element_to_be_clickable((By.ID, "android:id/big_text"))) 
    element.click() 

たぶん、このような何かが働くだろうか?

element = WebDriverWait(self.driver, 3).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="android:id/big_text" and contains(text(), "validation"]'))) 
    element.click() 

しかし、私はそれをどのようにフォーマットするのかは分かりません。その他の提案。ありがとう!最後の試みで

答えて

0

あなたのブラケットが間違っている、としてみてください:

element = WebDriverWait(self.driver, 3).until(
EC.presence_of_element_located(By.XPATH, '//*[@id="android:id/big_text" and contains(text(), "validation")]')) 
element.click() 
+0

EC.presence_of_element_located(By.XPATH、「// * [ID @ = "アンドロイド:ID/big_text" と含まれています(テキスト(3)与えられた2つの引数をとります。 – cjg123

+0

これは機能しません:element = WebDriverWait(self.driver、3).until( EC.element_to_be_clickable (By.XPATH、 "// * [contains(text()、 'validation')]"))) eleme nt.click()要素はクリックされず、エラーはスローされません。 – cjg123

0
 element = WebDriverWait(self.driver, 3).until(
     EC.presence_of_all_elements_located((By.ID, "android:id/big_text"))) 
     element[0].click() 

作品を十分によく、今のところ...より良いオプションにオープン。

+0

いつでも他のロケータの中で最善のオプションであるxpathを試すことができます。あなたは私の上記の答えに記載されているxpathをチェックすることができます。 – Vinod

0

以下を試してください。それは動作するはずです。 appiumクライアントのxpathでのtext()の実装は、ブラウザ用のセレンとは少し異なります。

EC.presence_of_element_located(By.XPATH, "//*[@id='android:id/big_text' and contains(@text, 'validation')]") 

OR

EC.presence_of_element_located(By.XPATH, "//*[@id="android:id/big_text" and contains(@text, "validation")]') 

上記の二つのXPathの間で異なるが使用引用のちょうどタイプです。

+0

運がない。どちらも投げられた2つの議論(3与えられた)を取る。別の括弧を追加してこの問題を解決しましたが、何も処理が行われませんでした(実際には何もクリックされませんでした)... – cjg123

0

これを試してみてください。

driver.find_element_by_name("text") 

またはこの:

driver.find_element_by_link_text("text") 
driver.find_element_by_partial_link_text('part_of_text') 
関連する問題