0

要素がクリック可能になるまで待つように指示するコードがありますが、何らかの理由でSeleniumが待つのではなく、その要素をクリックして、ポイント(x、y)でクリックできません。どのようにこれを修正するための任意のアイデア?ここでSelenium explicit wait doesnt work

x = '//*[@id="arrow-r"]/i' 
driver = webdriver.Chrome(path) 
driver.get('https://www.inc.com/inc5000/list/2017') 
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, x))) 
driver.find_element_by_xpath(x).click() 
+0

でクリックに関連する問題についてのブログ記事を書きましたか? – cezarypiatek

+0

@cezarypiatek予想される条件 –

+0

EC.element_to_be_clickable要素が表示され有効になっているかどうかを確認します。可視性の観点からは、要素が他の要素の後ろにあるシナリオは含まれません。あなたのページがblockUIウィジェットのようなものを使用していて、クリックが消える前にclick()が起こっている可能性があります。 – cezarypiatek

答えて

0

Pythonのセレンのドキュメントのための「待機中」のセクションへのリンクです:要素が表示され、有効になっているかどうかをチェックEC.element_to_be_clickable

element = WebDriverWait(driver, 10).until(
    EC.visibility_of((By.XPATH, "Your xpath")) 
) 
element.click(); 
+0

それはまだ動作しません。 –

+0

あなたは今何が間違っていますか? – zsbappa

+0

ポイント –

1

Click here

待ちは次のようになります。可視性の観点からは、要素が他の要素の後ろにあるシナリオは含まれません。あなたのページがblockUIウィジェットのようなものを使用していて、クリックが消える前にclick()が起こっている可能性があります。 EC.element_to_be_clickable((By.XPATH、x))を強調することで要素が本当にクリック可能かどうかを確認することができます。私のプロジェクトでは、私は以下のように実装を使用します。

static bool IsElementClickable(this RemoteWebDriver driver, IWebElement element) 
{ 
    return (bool)driver.ExecuteScript(@" 
      (function(element){ 
       var rec = element.getBoundingClientRect(); 
       var elementAtPosition = document.elementFromPoint(rec.left+rec.width/2, rec.top+rec.height/2); 
       return element == elementAtPosition || element.contains(elementAtPosition); 
      })(arguments[0]); 
    ", element); 
} 

このコードは、C#であるが、私はあなたが簡単に選択のあなたのプログラム言語に翻訳することができます確信しています。

UPDATE: 私は、ECクラスは何セレン枠組みhttps://cezarypiatek.github.io/post/why-click-with-selenium-so-hard/