2017-04-23 43 views
0

我有多個具有相同資源id的元素(它們都不在同一屏幕上),所以我需要能夠根據它們包含的文本來選擇它們。但是,部分文本會偶爾發生變化,對於每個元素,只有一小段文字會不斷顯示。那麼,如何在需要時選擇每個元素呢?我已經試過:選擇一個包含特定文本的webelement

不幸的是,它返回一個布爾值,所以我不能「點擊」它:

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」 和包含(文本(),「validation」)]')) TypeError:__init __()只需要2個參數(給出3個) – 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()的實現與瀏覽器的selenium沒什麼兩樣。

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') 
相關問題