2016-05-31 4 views
1

그래서 셀레늄을 사용하여 프레임을 선택하려고합니다. 나는 stackoverflow에 관한 많은 예제와 비슷한 질문을 발견했다.Selenium을 사용하여 프레임 선택

모두 프레임에있는 요소를 선택하려면 먼저 해당 프레임으로 "이동"한 다음 원하는 요소를 가져와야한다고 지적했습니다. 하지만 내가 원하는 프레임을 얻을 수없는 것 같습니다. 내가 읽은

모든 포스트는 말했다 사용 :

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

을 모두가 시도하지 않고 파이썬 코드 :

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

일어나고 왜 어떤 생각 :

  • 귀하의 프레임이 일부 자바 스크립트를하고있다 함수 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

무슨로드() 자바 스크립트가하고 있는지 확인하십시오. 그러나 프레임 이름에 대한 xpath가 아니라 로케이터로 프레임의 ID를 사용하는 것이 좋습니다.

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "contentfrm"))) 
driver.switch_to.frame(element) 
관련 문제