2017-11-22 3 views
1

セレン 'find_element'を静的にすることはできますか?私は右の自分自身を表現した場合、私は知らないが、私の問題は、私はこのコードを持っている

def select_chat(): 
    driver.implicitly_wait(10) 
    while True: 
     chat_unread = driver.find_element_by_class_name('chat-drag-cover') 
     chat_contains = chat_unread.get_attribute('innerHTML') 
     if 'chat_unread' in chat_contains: 
      chat_unread.click() 

select_chat() 

だから、この関数は「未読チャット」を含む複数の要素を見つける必要があり、問題はそれが見つけるんです要素のうちの1つをロックし、他の要素のためには行っていませんが、何ができますか? (WebElementである)あなたがfind_element_by_class_name('chat-drag-cover')非常に最初の一致が返され、chat_unread内に格納されます場合は

+0

私はwhileループをどこで壊しているのかわかりませんが、どこかでそれをやっていると思います。 私はこの '要素を使用し= WebDriverWait(ドライバ、10)( EC.presence_of_element_located((By.ID、 "myDynamicElement")) ).until' – Arno

+0

問題がある:ある複数 'のdiv' を含みます[チャットの未読チャット 'を検出した後に、' find_element 'が他のものを見つけられないため、ドライバがそのボタンをクリックすることができるため、ドライバは最初のものをクリックするだけで、他の後の時間 –

答えて

0

は、あなたのコード内で起こっていただきました!を見ていることができます。 例:

<selenium.webdriver.remote.webelement.WebElement (session="11a81cb13625b168f875de3b10dca3c5", element="0.3018415455432639-1")> 

次に我々は、'innerHTML'をretriving及び(Stringである)chat_containsに格納されています。 例:

Explore the life and work 

最後に、我々はif 'chat_unread' in chat_contains:を検証しようとしています。文字列<selenium.webdriver.remote.webelement.WebElement (session="11a81cb13625b168f875de3b10dca3c5", element="0.3018415455432639-1")>

は常にある

Explore the life and workが含まれている場合

:どちらが同等です。

だからclick()は呼び出されず、driver.find_element_by_class_nameに戻ります。 WebElement自体例えば、

chat_unread = driver.find_elements_by_class_name('chat-drag-cover') 

最後に:

そこで溶液は次のようにリストを返すdriver.find_elements_by_class_name("foo")を使用することであろうchat unreadは検証の一部であってはなりませんが、その属性はたとえば次のように使用してください。 innerHTML

+0

まあ、最も奇妙なことは、実際には「チャット未読」を含む要素の1つをクリックすることですが、それはすべてでクリックしていません... –

+0

IMO、 'IDE'または' Python Interpreter ' 'String'に対して' WebElement'を積み重ねようとしています – DebanjanB

+0

find_elementを変更することで修正_by_class_nameをfind_element_by_css_selectorに変更しましたが、ありがとうございます:) –

関連する問題