2011-08-22 3 views
1

저는 Selenium Python을 처음 사용합니다. 지금은 이미 셀렌 IDE에서 변환 파이썬 코드를 실행하려고 해요. 코드를 실행할 때이 오류가 발생했습니다.IndexError : 목록 색인이 범위를 벗어났습니다.

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.common.exceptions import NoSuchElementException 
import unittest, time, re 

class Isnin2(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Firefox() 
     self.driver.implicitly_wait(30) 
     self.base_url = "http://www.google.com.my/" 
     self.verificationErrors = [] 

    def test_isnin2(self): 
     driver = self.driver 
     driver.get("https://stackoverflow.com/search?q=google&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a") 
     driver.find_element_by_css_selector("em").click() 
     driver.find_element_by_id("lst-ib").click() 
     driver.find_element_by_id("lst-ib").clear() 
     driver.find_element_by_id("lst-ib").send_keys("selenium python") 
     driver.find_element_by_link_text("Setting Up Selenium with Python").click() 
     driver.find_element_by_link_text("selenium.py").click() 

    def is_element_present(self, how, what): 
     try: self.driver.find_element(by=how, value=what) 
     except NoSuchElementException, e: return False 
     return True 

    def tearDown(self): 
     self.driver.quit() 
     self.assertEqual([], self.verificationErrors) 

if __name__ == "__main__": 
    unittest.main() 

난 정말이야 내가 셀레늄 파이썬에 새로 온 이후 누군가가 나를 도울 수 있기를 바랍니다 : 난 내 아래와 같이 코딩 코드

ERROR: test_isnin2 (__main__.Isnin2) 

====================================================================== 
ERROR: test_isnin2 (__main__.Isnin2) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\EclipseWorkspaces\csse120\python\src\Isnin2.py", line 20, in test_isnin2 
    driver.get("https://stackoverflow.com/search?q=google&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a") 
    File "C:\Program Files\Python27\lib\site-packages\selenium-2.4.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 154, in get 
    self.execute(Command.GET, {'url': url}) 
    File "C:\Program Files\Python27\lib\site-packages\selenium-2.4.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 144, in execute 
    self.error_handler.check_response(response) 
    File "C:\Program Files\Python27\lib\site-packages\selenium-2.4.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 111, in check_response 
    zeroeth = value['stackTrace'][0] 
IndexError: list index out of range 

---------------------------------------------------------------------- 
Ran 1 test in 35.406s 

FAILED (errors=1) 

을 실행하는 데 이클립스를 사용하고 있습니다.

답변

1

base_urldriver에 제공하지 않은 것으로 보입니다.

driver.get(self.base_url + "https://stackoverflow.com/search?q=google&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a") 

편집 :이 같은 뭔가

driver.get("https://stackoverflow.com/search?q=google&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a") 

: 어쩌면 당신은이 라인을 교체해야

을 또한 : 당신이 is_element_present 방법으로 뭔가를 테스트 할 수 있습니까? 파이썬 unittest 프레임 워크에서 메서드 이름은 test으로 시작해야합니다. 그래서 시험으로 바꾸려면 test_is_element_present으로 이름을 변경하십시오.

추가 답변 : 응답에 대해 여러 개의 테스트를 계획하는 경우 driver.get() 호출을 setUp 메서드에 배치해야합니다. 테스트 순서는 테스트를 작성한 순서와 반드시 동일 할 필요가 없기 때문입니다. 반면에 어떤 테스트가 호출되기 전에 setUp이 실행되도록 보장됩니다.

1

내가 할 수 있으면 Constantinius 응답에 대해 의견을 말하고 싶지만 담당자가 없습니다. . .

나는 IDE를 살펴보기 위해이 질문을 사용했다. 위의 코드는 Python Webdriver에 대한 직접적인 내보내기이며 내 테스트 케이스에서는 같은 잘못된 형식의 .get (base_url 제공되지 않음).

Constantinius에 언급 된 나머지 문제는 IDE의 제한된 기능의 결과입니다. is_element_present 메서드는 IDE에서 진행중인 작업의 일부인 것처럼 보이며 실제 검사를위한 자리 표시 자라고 추측합니다.

관련 문제