2014-11-15 16 views
6

Tôi có thể xác minh xem một phần tử có tồn tại hay không và có hiển thị hay không, nhưng dường như không tìm được cách để xem nó có 'có thể nhấp' hay không về vô hiệu hóa).Kiểm tra xem phần tử có thể nhấp vào trong selenium

Sự cố thường xảy ra khi điền biểu mẫu web, phần tử tôi muốn có thể được phủ bằng một div khi tải. Bản thân div khá khó phát hiện vì nó là id, tên và thậm chí css là linh hoạt. Do đó tôi đang cố gắng để phát hiện có hay không một lĩnh vực đầu vào có thể được 'nhấp' hoặc 'đầy'. Khi div lớp phủ hiện diện, trường không thể được điền bởi người dùng thông thường (Vì div sẽ che phủ trường nhập và không cho phép người dùng điền vào) nhưng nó có thể được lấp đầy bởi selen. Tôi muốn ngăn chặn điều đó và chỉ cho phép selen để lấp đầy nó khi người dùng cũng có thể điền vào nó.

Trả lời

8

Bạn có thể wait for the element to be clickable:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get("http://somedomain") 

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "myDynamicElement")) 
) 

Hoặc, bạn có thể làm theo các EAFP principle và bắt một ngoại lệ được nêu ra bởi click():

from selenium.common.exceptions import WebDriverException 

try: 
    element.click() 
except WebDriverException: 
    print "Element is not clickable" 
+1

Dường như không ai trong số các công việc trên. Trắng lớp phủ vẫn còn hiện diện, chờ đợi element_to_be_clickable vẫn sẽ cho phép nó thông qua. Không có ngoại lệ nào được ném ra khi tôi cố gắng nhấp vào phần tử không sử dụng được. –

+1

bạn có thể chia sẻ các thông tin sau: 1) mã nguồn html liên quan 2) .Selenium Binding phiên bản 3) .Tên tên và phiên bản –

+0

@AayushAgrawal, thì không dễ để nói thêm về vấn đề của bạn cho đến khi bạn thử chính nó. Vui lòng cung cấp mã bạn hiện có bao gồm trang web mục tiêu mà bạn đang thử nghiệm (nếu có thể). – alecxe

1

Bạn có thể sử dụng webElement.isEnabled()webElement.isDisplayed() phương pháp trước khi thực hiện bất kỳ thao tác nào trên trường nhập ...

Tôi hy vọng điều này sẽ giải quyết vấn đề bạn ...

khác, bạn cũng có thể đặt một vòng lặp để kiểm tra trên 2 điều kiện và nếu đó là những sự thật bạn có thể chỉ định các văn bản đầu vào và một lần nữa bạn có thể tìm thấy những yếu tố tương tự và bạn có thể nhận được văn bản của webelement và so sánh văn bản đó với văn bản bạn đã nhập. Nếu những trận đấu đó bạn có thể ra khỏi vòng lặp.

0

bấm một (cho selen) yếu tố không thể truy cập i alwas sử dụng:

public void clickElement(WebElement el) throws InterruptedException { 
    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", el); 
} 
Các vấn đề liên quan