2014-06-23 20 views
15

Tôi đã cố gắng lấp đầy đầu vào:Python với selen: không thể xác định vị trí nguyên tố mà thực sự tồn tại

<input id="PASSFIELD1" class="logField" type="password" onkeyup="next(this, event);" maxlength="1" autocomplete="off" name="PASSFIELD1"></input> 

Để làm điều này, tôi phải tìm yếu tố này.

tôi đã cố gắng dưới điều:

  1. pass1=driver.find_element_by_name("PASSFIELD1")

  2. pass1=driver.find_element_by_id("PASSFIELD1")

  3. pass1= driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]") (đường đi từ firebug)

  4. Thậm chí đợi 100 giây cho nó

self.wait.until(EC.visibility_of_element_located((By.XPATH,"/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]"))) self.assertTrue(self.driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]"))

tôi luôn luôn nhận được:

selenium.common.exceptions.NoSuchElementException: Thư: 'Không thể xác định vị trí nguyên tố: (...)

Bạn có biết Tôi đang làm sai?

+0

bạn có thể hiển thị, nơi các phần tử nằm trên một trang hoặc cung cấp một liên kết? – alecxe

+0

là phần tử bên trong iframe? – Amey

+0

@Amey đây là chính xác những gì tôi muốn biết :) – alecxe

Trả lời

16

Vấn đề là thẻ input của bạn là bên trong một iframe, bạn cần phải switch to nó đầu tiên:

frame = driver.find_element_by_xpath('//frame[@name="main"]') 
driver.switch_to.frame(frame) 
pass1 = driver.find_element_by_id("PASSFIELD1") 
+0

Vâng, đúng vậy! Cảm ơn bạn. Tôi phải nói rằng bạn câu hỏi trước đó là tốt và tôi tìm thấy nó một mình trên trang web: http://selenium-python.readthedocs.org/en/latest/navigating.html#moving-between-windows-and-frames Một lần nữa , cảm ơn tất cả các bạn. – ti01878

Các vấn đề liên quan