2017-06-11 3 views
0

私はwebdriven(python)を使ってテストしているアプリケーションを持っています。 基本的な要素(クリック可能)を持つ要素(ボタンA)がありますbuttonA1、buttonA2、buttonA3Selenium python:クリック操作の直後にボタン下の要素が壊れる

要素(buttonA)を検索できます。今、私はこの要素の下に存在する要素の総数を見つける必要があります(buttonA)。

ただし、buttonAをクリックすると、下にあるボタンセクションがすぐに展開されて折りたたまれます。私は基本的なボタンの以降の操作のためにセクションを開いたままにすることはできません。

これはSELECTドロップダウンではなく、buttonAをクリックしたときにのみ、基になる要素divがhtmlになることに注意してください。

この問題を回避する方法はありますか?ここ

driver_element_gear = self.driver.find_element_by_xpath('<some_xpath>') # returns a webelement to work on 
    self.wait(5) 
    driver_element_gear.click() # I am able to click on the element 
    self.wait(5) 
    # fetch the elements based on class_name to check the number of elements under the gear button 
    gear_dropdown_class_name = self.gear_dropdown_panel['delete_button']['class_name'] 
    element_data = self.driver.find_elements_by_class_name(gear_dropdown_class_name) 

    if len(element_data)==3: # getting len as 0 since the elements are not present 
     return 'Success' 

をbuttonAがクリックされると示されており、ページに動的に追加されたHTMLコンテンツである:

は、ここで私が使用されるコードの小片です。

<div class="GKVVQWVDHDD x-view-highlightrow GKVVQWVDJDD">buttonA1</div> 
<div class="GKVVQWVDHDD">buttonA2</div> 
<div class="GKVVQWVDHDD">buttonA3</div> 

buttonAのHTML:

<div class="GKVVQWVDG3C" style="margin-top:-8px;right:2px;"></div> 

溶液中アンダーソンにより示唆されるように、これは歯車のアイコン(これはbuttonAがそれに書かれていない場合があります)

がウェイトを使用しようとしていることに注意してください

locator = "div.GKVVQWVDHDD" 
    driver_element_gear.click() 
    wait(self.driver, 10).until(lambda driver: len(driver.find_elements_by_css_selector(locator)) > 0) 
    gear_dropdown_elements = self.driver.find_elements_by_css_selector(locator) 
    for element in gear_dropdown_elements: 
     print element.text 
    self.wait(2) 

しかし、エラーを取得し共有:

ここでは
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document 

buttonAが拡大したら、HTMLである:

<div class="GKVVQWVDEUC" style="border-width: 1px; z-index: 1107; visibility: visible; height: auto; width: 190px; position: absolute; left: 1485px; top: 169px;"> 
<div> 
    <div class="GKVVQWVDKDD GKVVQWVDAL x-ignore" style="border-width: 0px; overflow-x: hidden; height: 110px; width: 190px; position: relative; left: 0px; top: 0px;"> 
     <div class="GKVVQWVDHDD">buttonA1</div> 
     <div class="GKVVQWVDHDD">buttonA2</div> 
     <div class="GKVVQWVDHDD">buttonA3</div> 
     <div class="GKVVQWVDHDD x-view-highlightrow GKVVQWVDJDD">buttonA4</div> 
     <div class="GKVVQWVDHDD">buttonA5</div> 

     <div class="GKVVQWVDJK" tabindex="0" style="left: 95px; top: 55px; position: absolute;"> 
      <input class="GKVVQWVDJK" tabindex="-1" role="presentation" style="opacity: 0; height: 1px; width: 1px; z-index: -1; overflow: hidden; position: absolute; border-width: 0px; font-size: 1px; line-height: 1px;" type="text"> 
     </div> 
    </div> 
</div> 

+0

私はjavascriptの実行者を使用して、プロパティの崩壊を削除するようにしてください、その後、あなたがボタンA. – Ankur

+0

のHTMLコンテンツを貼り付けてくださいこんにちはAnkur、pls精巧なことができますか?私はセレンを初めて使っており、知識が限られています。いくつかの例を提供することができれば最高です –

+0

もbuttonAのHTMLを追加したボタンA. – Ankur

答えて

0

私はjavascriptのクリックを使用して、問題を解決することができました。ここ

はコードです:

self.driver.execute_script("arguments[0].click()", webElement) 
関連する問題