Jak definiujesz "widoczny dla użytkownika"? Jak masz zamiar to sprawdzić? Jeśli ma wysokość? Jeśli nie jest ukryty przez CSS? A co, jeśli element nadrzędny jest ukryty przez CSS?
Najbardziej niezawodnym sposobem będzie użycie wbudowanej w Selenium właściwości .Displayed
(jeśli używasz języka C#, Java ma coś podobnego) i połączyć ją z "widocznym" selektorem jQuery: http://api.jquery.com/visible-selector/. Przykład poniżej, w C#.
var element = Driver.FindElement(By.Id("test"));
bool isVisible = element.Displayed;
var javascriptCapableDriver = (IJavascriptExecutor)Driver;
bool jQueryBelivesElementIsVisible = javascriptCapableDriver.ExecuteScript("return $('#myElement').is(:visible);");
bool elementIsVisible = isVisible && jQueryBelievesElementIsVisible;
Otrzymają one większość przypadków.
Nie jest możliwe bez kodu po stronie klienta lub w przygotowaniu, że ktoś inny znajdzie sposób, w jaki można to zrobić w języku po stronie serwera, mam duże wątpliwości, że będzie ładny, czytelny lub niezawodny.
jQuery ma metodę offset()
:
http://api.jquery.com/offset/
To jednak nie będzie działać, gdy biorąc pod uwagę granice, marginesy, tego rodzaju rzeczy.
Niestety, nie ma mowy bez JavaScript. Czemu tego nie chcesz? Czy cokolwiek z [tutaj] (http://stackoverflow.com/questions/704758/how-to-check-if-an-element-is-really-visible-with-javascript) pomaga? –
@Slanec Na przykład, mam błąd, w którym z powodu słabego CSS, przycisk, który musi zostać kliknięty, jest pozycjonowany, na przykład przy szerokości widoczności wynoszącej 110%, a przepełnienie jest ustawione na ukryte. Zatem przycisk NIGDY nie będzie kliknięciem, a nie przewijaniem, zmianą rozmiaru ani niczym. Dzieje się tak tylko w IE11. Tak więc teraz chcę, żeby przypadek testowy sprawdzał, czy przycisk jest widoczny, aby dodać do regresji produktu. Niestety funkcja isDisplayed() jest prawdziwa dla elementu. – dmansfield
Sprawdzam widoczność elementu za pomocą Css, indeks Z. Czy mogę sprawdzić widoczność elementu, w tylnej warstwie innego elementu. – bcrajkumar