web-dev-qa-db-ja.com

Python Selenium:要素がクリック可能になるまで待機-動作していません

Webアプリをテストします。テーブルにはすべてのエントリを選択するためのボタンがあります。私はもう試した:

driver.wait.until(ExpectedCondition.element_to_be_clickable((By.XPATH, "myXpath"))).click()

セレンはボタンをクリックしますが、何も起こりません。 (send_Keys(Keys.Return)も使用)アプリケーションはGXTで開発されており、ボタンの後ろには多くのjavascriptがあります。イベントローダーの準備ができるまで待つ可能性はありますか?クリックで問題が解決されるまで待機しますが、自動テストのソリューションではありません。

23
Storm

python isの明示的な待機の正しい構文:

 element = WebDriverWait(driver, 20).until(
 EC.presence_of_element_located((By.ID, "myElement")))

上にした後:element.click();

だからあなたの場合:

from Selenium.webdriver.common.by import By
from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "myXpath")))

element.click();

あなたがそれに従うことをお勧めします。また、コード全体を共有して、修正できるようにします。少し混乱させるだけの1行のコード。

50
Helping Hands

私もその問題を抱えていました... Webアプリはビューよりもビューが多く、Appiumが間違っていることがあります。

これは私のために働いた:

x = webElement.location['x'] + (webElement.size['width']/2)
y = webElement.location['y'] + (webElement.size['height']/2)
print("x: "+x+" - y: "+y)

//I have setted a 200 milli duration for the click...
//I use tap just for Android... If is iOS for me it works better touchAction
driver.tap([(x,y)], 200)

編集

私はあなたの質問を誤解しました...ごめん... Xpathを次のように変更するかもしれません:(これがWebアプリで機能するかどうかわからない)

xpath = "//whatever_goes_here[@clickable='true']"
2
barbudito