2017-03-29 1 views
0

나는 PythonSelenium을 사용하여 테스트 사례를 자동화합니다.Python Selenium webdriver 할 수 없습니다 TimeoutException : 요소를 기다리는 중 메시지

//*[@id="fybAddCartEvent"] 

어떤 문제가 될 수 : 문제는 내가 test_press_add_to_cart에 도달 할 때 Webdriverxpath를 가진 요소가 표시되지 않는다는 것입니다?

는 예외입니다 :

"TimeoutException : 메시지"

요소의 HTML은 다음과 같습니다

<a href="#" class="button" data-product_id="18542" data-wp_nonce="7c3d595f98" id="fybAddCartEvent"> 
Add to cart</a> 

그리고 스크립트 :

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.firefox.webdriver import WebDriver 
from selenium.webdriver.common.action_chains import ActionChains 
from HTMLTestRunner import HTMLTestRunner 

class Fotball_add_to_cart(unittest.TestCase): 
    @classmethod 
def setUpClass(inst): 
    inst.driver = webdriver.Chrome('C:/chromedriver/chromedriver.exe') 
    driver = inst.driver 
    driver.get("http://ak:[email protected]/football/") 
    inst.driver.maximize_window() 
    time.sleep(5) 

    #click on "View All Fotball Products" 
def test_click_on_view_all_fotball_products(self): 
    viewProductsXpath = "a.woocommerce-nested-category-layout-see-more" 
    self.viewProductsElement = self.driver.find_element_by_css_selector(viewProductsXpath) 
    self.viewProductsElement.click()              
    time.sleep(7) 
    #select a product 

def test_select_a_product_and_view_details(self): 
    #select product 
    tshirtXpath = "//a[@href=\"http://uat.athleticknit.com/product/f810/F810-000/\"]" 
    self.tshirtElement = self.driver.find_element_by_xpath(tshirtXpath) 
    self.tshirtElement.click() 
    time.sleep(60) 

def test_press_add_to_cart(self): 
    #press add to cart 
    driver = self.driver 
    addToCartXpath = '//*[@id="fybAddCartEvent"]' 
    self.addToCartElement =WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath(addToCartXpath)) 
    self.addToCartElement.click() 
    time.sleep(5) 
@classmethod  
def tearDownClass(inst): 
    inst.driver.stop_client() 
    inst.driver.close() 
    inst.driver.quit() 
+0

iframe 안에 있는지 확인 했습니까? – JeffC

+0

@ alisu245, 같은 문제에 직면 해 있습니까? – NarendraR

답변

1

사실 당신은 조건이 다음 만족 TimeoutException 표시되지 않는 경우에 따라서는 20초 때까지 조건을 기다리고있다 바로 여기

self.addToCartElement =WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath(addToCartXpath)) 

명시 대기를 사용했다.

귀하의 요구 사항은 다음과 같은 방법으로 시도 '장바구니에 담기'을 기다리는 경우 -

element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.xpath, addToCartXpath))) 

을 참고 : - 당신은 요소 ID가 있다면 대신 XPath는의 ID로 요소를 찾습니다하시기 바랍니다

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "fybAddCartEvent"))) 

element.click() 
+0

나는 bui가 작동하지 않는 것을 시도했다, 나는 id 후에도 식별하려고했다. 나의 requirment는 장바구니에 추가가 나타날 때까지 기다린 다음 클릭하십시오. 엘리먼트를 검색하기 전에 코드에서 60 초의 잠을 잤지 만 많은 시간이 있고 엘리먼트가 실제로 나타나지만 path.or에 의해 식별 될 수 없다. id – alisu245