2016-05-31 17 views
1

したがって、セレンを使用してフレームを選択しようとしています。私はこれに関するstackoverflowに関する多くの例と同様の質問を見つけました。セレンを使用してフレームを選択

フレーム内にある要素を選択するには、最初にそのフレームに移動してから、必要な要素を取得する必要があると指摘しました。 しかし私は、私が望むフレームを得ることができないようです。

私が読んですべてのポストを使用することを言った:

driver.switch_to.frame("contentfrm") # Fetch by name, or 
driver.switch_to.frame(1) # Fetch by index 

だから私はそれらのすべてをしようと関係なく、私が使用しているもの、私はいつもそれがフレームを見つけることができないというエラーを取得していない、selenium.common.exceptions.NoSuchFrameException: Message: Unable to locate frame: contentfrm

Pythonコード:

from selenium import webdriver 

from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 

driver.get("http://10.0.0.2/html/content1.asp") 
driver.get("10.0.0.2") 

elem = driver.find_element_by_name("Username") 
elem.send_keys("admin") 

elem = driver.find_element_by_name("Password") 
elem.send_keys("admin2") 

elem.send_keys(Keys.ENTER) 

# ---- 
driver.switch_to.default_content() 
driver.switch_to.frame("contentfrm") 
# elem = driver.find_element_by_id("m8") 

# driver.quit() 

HTMLコード:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Quick Start</title> 
</head> 

<frameset onload="load()" rows="0,*" frameborder="0" border="0" framespacing="0"> 
    <frame name="topFrame" scrolling="no" src="../main/refresh.asp" __idm_frm__="200"></frame> 
    <frame name="contentfrm" id="contentfrm" __idm_frm__="201"></frame> 
</frameset> 

</html> 

注:コードは、フレームを選択する必要がある場所まで正しく動作します。

これはウェブサイトがなければ

+0

このフレームにはコンテンツがありません。あなたは 'topFrame'を望んでいませんか? –

+0

@Rafaelそれは実際に内容を持っています。私はちょうどそうでなければそれを含めなかった多くのコードになるだろう。しかし、私が探している要素はそのフレームにあります。 – jovaee

+0

'switch'文の前にデフォルトの内容を削除し、要素を見つける前に待ち時間を与えようとします。 ' '' driver.switch_to.frame( "contentfrm"); WebDriverWait wait =新しいWebDriverWait(ドライバ、15); wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector( ""))); '' ' –

答えて

2

が起こっている理由を任意のアイデアは問題では、問題が何であるかを特定するのは難しいですが、私はいくつかの前提条件になります:あなたのフレームセットは、上のいくつかのJavaScriptを行っている

  • を関数load()があり、その要素を見つけようとするとその要素を利用できなくなる可能性があります。

  • それはたぶん、機能 switchto.frame()での選択は、あなたがそれがないと思うように動作しません何のコンテンツ

  • を持っていませんので、あなたが取得しているフレーム要素にはsrc属性を持っていません。

は、要素が見えるようにするのを待ち、その後のxpathで、それを選択する方が良いでしょう安全のために@Rafaelが、別のロケータを使用することをお勧めしますと、あなたがすべきのよう

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//frame[@name='contentfrm']")) 
) 
driver.switch_to.frame(element) 
1

on load()JavaScriptが何をしているか確認してください。しかし、私は、フレーム名のためのxpathではなく、ロケータとしてフレームのidを使うことを提案します。

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "contentfrm"))) 
driver.switch_to.frame(element) 
関連する問題