2017-04-21 8 views
0

この質問はおそらく以前に尋ねられましたが、私はその場所を追跡できないようです...しかし、画面上の要素を選択する方法を見つけようとしています別の要素と同じ 'resource-id'を使用しますが、両方の要素を特定してから2番目の要素を選択することはできません。また、要素のTextを変更できるので、Class + TextでXPATHを使用することはできません。私はresource-idと要素の 'text'内の特定の文字列(私が知っている文字列は変わらない)を使う方法があるのだろうかと思っていました。または、おそらくクラス+「テキスト」でXPATHを使用するいくつかのサブテキスト、例えば、私は区別できるようにする必要がある要素の特定のテキストを含む要素を見つけてクリックしてください

get_code = WebDriverWait(self.driver, 3).until(
    EC.element_to_be_clickable((By.XPATH, "//android.widget.TextView[@text.contains='differentiatable sub-string']"))) 
    element.click() 

画像は装着示すものが含まれています。他の要素は、「Text」と「Package」を除いて同じ属性を持ちます。

私は、「検証」は私が(それは第二の要素に含まれ、その文字列が常に存在している)を区別することを可能にする部分文字列である

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

を試してみました、これはTrueまたはFalseの値を 'クリック'することができないために失敗します)

+0

私は思った要素= WebDriverWait(self.driver、3).until( EC.text_to_be_present_in_element((By.ID、 "android:id/big_text")、 'validation'))element.click()は機能するかもしれませんが、同じ問題があります... 'AttributeError:' bool '属性なし 'クリック' – cjg123

答えて

0

文字列を含む要素と一致するように探している場合は、これを使用できます

(注:を使用します。ではなくtext()は、XPathには少し短くする。)

はまた、私は、XPath以外(正しかったので、私が付与されたあなたのコマンドのために取っているのpythonのAPIを知りません)。私はJavaに精通しています。私はこれが助けてくれることを願っています(私は括弧の余分なセットのように見えるものを削除しました)。あなたは完全一致使用たいとき

Here's an example of locating Xpath for Android from saucelabs

は正確に (注意あなたが文字列に一致するように、これを使用することができ

from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(self.driver, 10) 
get_code = wait.until(EC.element_to_be_clickable(By.XPATH, "//TextView[contains(.,'differentiatable sub-string')"]))) 
element.click() 

を使用含まに注意してください) =):

from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(self.driver, 10) 
get_code = wait.until(EC.element_to_be_clickable(By.XPATH, "//TextView[.='differentiatable sub-string')"]))) 
element.click() 

そして、これは正確にテキストと一致しますが、空白、正規空間を使用します(テキスト())または正規空間を囲むトリミングする(。): あなたは正確に文字列を一致させるために、これを使用することができます

from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(self.driver, 10) 
get_code = wait.until(EC.element_to_be_clickable(By.XPATH, "//TextView[normalize-space(.)='differentiatable sub-string']))) 
element.click() 

以前のXpathが機能していなかったようです。あなたはどちらかを試すことができます: 私はAndroidのテキストでは、要素の実際のプロパティであることを認識していませんでした。

wait = WebDriverWait(self.driver, 10) 
get_code = wait.until(EC.element_to_be_clickable(By.XPATH,"//android.widget.Textview 
[@class='android.widget.Textview' and contains(@text,'Charging')"]))) 
element.click() 

それとも 待機= WebDriverWait(自己:だから、次のではなく、私が前にやっていた何を使用する必要があります。ドライバ、10) get_code = wait.until(EC.element_to_be_clickable(By.XPATH、 "// android.widget.Textview [@ class = 'android.widget.Textview'と(。、 'Charging')」] ))) element.click()

場合は、それらの作業のどちら

wait = WebDriverWait(self.driver, 10) 
get_code = wait.until(EC.element_to_be_clickable(By.XPATH,//FrameLayout[1]//LinearLayout[2]//TextView[1]))) 
element.click() 

それとも、これらが正しくない場合)要素名を修正してください(完全なクラス名を使用する必要があります。

wait = WebDriverWait(self.driver, 10) 
get_code = wait.until(EC.element_to_be_clickable(By.XPATH,//android.widget.FrameLayout[1]//android.widget.LinearLayout[2]//android.widget.TextView[1]))) 
element.click() 
+0

要素= WebDriverWait(self.driver、3).until( EC.element_to_be_clickable(By.XPATH、 "//android.widget.TextView[contains(text(),validation ')]") ) element.click() - 私に "TypeError:__init __()は2つの引数(3が与えられます)を受け取ります" – cjg123

+0

私の例では括弧を忘れてしまったと思うので、Selenium for Pythonのドキュメントを見て、コード例。 –

+0

変更されたバージョンを使用すると同じ結果が返されます。 'get_code = wait.until(EC.element_to_be_clickable(By.XPATH、 "//android.widget.TextView[contains(text(),'validation'))")) TypeError: __init __()は2つの引数をとります(3が与えられます) ' – cjg123

関連する問題