2016-11-14 12 views
1

特定のWebページでフォームに記入しようとしています。私はほとんど ページで成功していますが、特定のものは私にトラブルを与えています。セレン、ポップアップフォーム(Python)

ページの中には、最初にフォーム自体が表示されない形式のページがあります。代わりにボタンをクリックすると、ページ内にポップアップが表示されます。

新しいポップアップウィンドウで作成され、アラートウィンドウで作成されるフォームを埋める方法に対処する例を見てきました。しかし、私はこの特定のケースを解決することができる例を見つけることができないようです。

これはこれまでのコードです。

 driver = webdriver.Chrome() 
    driver.implicitly_wait(10) 

    mouse = webdriver.ActionChains(driver)  
    driver.get(url) 

    driver.maximize_window() 

    value = 'fill form' 
    span_xpath = '//span[contains(text(), "' + value + '")]' 
    span_element = driver.find_element_by_xpath(span_xpath) 
    mouse.move_to_element(span_element).click().perform() 
    time.sleep(5) 

ここまではすべて動作し、フォームのボタンがクリックされてブラウザのページにフォームが開きます。

しかし、次が実行されたときにエラーが常に発生しません:「そのような要素:要素を見つけることができない」私はというように、名前、ID、XPathのことで要素を見つけることを試みた

 n =driver.find_element_by_id('name') 
    n.send_keys('john smith') 

けどをどのような試行をしても、フォーム要素のいずれも見つけることができません。

この問題については、私は大いに感謝します。 driver.switch_to_frame(0) (parent iFrame) を用い

+0

pop要素がフレーム/ iframeの内側にないことを確認しますか? –

+0

@SaurabhGaur、はい、iframeにあります。しかしiframe内のiframeです。 src = driver.find_element_by_id( "iframe_id")。get_attribute( "src")を使用して、最初のiframeのsrcにアクセスできます。しかし、2番目のiframe withiinのiframeにはIDがないので、srcを取得する方法がわからない –

+0

子のiframeにアクセスする前に最初の親iframeを切り替える必要があります –

答えて

0

第一スイッチ次いでdriver.switch_to_frame(1) (chiled iFrame) を使用してスイッチし、次いでfind the element

注:代わりindexを使用してのあなたは、他のWeb要素と同様にID、名前、XPathのなどを使用してフレームを特定し、引数としてswitch_to_frameするために、その要素を渡すことができます。これにより一貫性が得られます。