2014-11-15 6 views
6

Jestem w stanie sprawdzić, czy element istnieje i czy jest wyświetlany, czy nie, ale nie może znaleźć sposobu, aby sprawdzić, czy jest "klikalny" (Nie mówię o niepełnosprawnych).Sprawdź, czy element jest klikalny w selenie

Problem polega na tym, że podczas wypełniania formularza internetowego element, który chcę, może być nakładany na element div podczas ładowania. Sam div jest raczej trudny do wykrycia, ponieważ jest id, nazwa, a nawet css jest elastyczny. Dlatego próbuję wykryć, czy dane pole wejściowe może być "kliknięte" czy "wypełnione". Gdy obecny jest element nadrzędny, pole nie może być wypełniane przez zwykłego użytkownika (ponieważ element div nakładałby pole wejściowe i nie pozwalałby użytkownikowi na wypełnienie go), ale można go wypełnić selenem. Chcę temu zapobiec i umożliwić selenowi wypełnienie go, gdy tylko użytkownik może go wypełnić.

Odpowiedz

8

Można 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")) 
) 

Albo można śledzić EAFP principle i złapać wyjątek podniesiony przez click():

from selenium.common.exceptions import WebDriverException 

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

Wydaje się, że żadna z powyższych prac. Biała nakładka jest nadal obecna, element_to_be_clickable wait nadal pozwala na to. Wyjątki nie są zgłaszane, gdy próbuję kliknąć nieużyteczny element. –

+1

Czy możesz podzielić się następującymi informacjami: 1) .relevant kod źródłowy html 2). Oprawa w wersji selekcji 3). Nazwa i wersja Browser –

+0

@AayushAgrawal dobrze, to nie jest łatwo powiedzieć więcej o problemie, dopóki nie pozwolisz nam spróbować to sami. Podaj kod, który aktualnie posiadasz, w tym stronę docelową, na którą testujesz (jeśli to możliwe). – alecxe

1

Można użyć webElement.isEnabled() i webElement.isDisplayed() metod przed wykonaniem dowolna operacja na polu wprowadzania danych ...

Mam nadzieję, że rozwiąże to Twój problem ...

W przeciwnym razie możesz również umieścić pętlę, aby sprawdzić powyżej 2 warunków, a jeśli są one prawdziwe, możesz określić tekst wejściowy i znowu możesz znaleźć ten sam element i ty może pobrać tekst strony internetowej i porównać ten tekst z wprowadzonym tekstem. Jeśli te mecze możesz wyjść z pętli.

0

do kliknij (dla selenu) nieosiągalny elementu i alwas korzystania:

public void clickElement(WebElement el) throws InterruptedException { 
    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", el); 
}