• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Select - element not interactable

Object Storage Arubacloud
+1 głos
351 wizyt
pytanie zadane 2 kwietnia 2022 w Java przez blofeld Użytkownik (700 p.)

Szanowni !

Prośba, uczę się Selenium i mam problem:  mój DOM nie reaguje na metodę select.

Tworzę poniższą metodę, kombinuję z waitami ale za każdym razem komunikat z tematu.

Zauważyłem, że lista na stronie nie reaguje na oznaczenie select'u ale na oznaczenie span'u.

Moim zadaniem jest obsłużyć tą listę tylko przez Select. Ratunku !

Poniżej mój kod i DOM

public SelectMenuPage selectRandomSpeed(){
    getWaitForTheElement().untilElementIsPresentCss("#speed");//<-presenceOfElementLocated
    Select select = new Select(selectSpeed);
    select.selectByIndex(0);
    return this;
}

2 odpowiedzi

0 głosów
odpowiedź 2 kwietnia 2022 przez Wiciorny Ekspert (269,710 p.)

Nie wiem czym jest selectSpeed jak wygląda odwołanie do niego ale to nie ma prawa zadziałać w taki sposób jeśli poprawnie nie pobierzesz elementu też wrapujesz 'cośia' co potencjalnie nie musi byc selektem a elementem HTML. bez specyfikacji 
 

  Select select = new Select(selectSpeed); // co to jest?
    select.selectByIndex(0);

 

pobierz odpowiednio webdriverem np. 

IWebElement select = driver.FindElement(By.Id("speed-button"));

 

komentarz 2 kwietnia 2022 przez blofeld Użytkownik (700 p.)

    @FindBy(css="#speed")
    WebElement selectSpeed;

Przez span button i potem przez bezpośredni lokator elementu działa, jednak ja muszę to obsłużyć przez metodę z klasy Select.

komentarz 2 kwietnia 2022 przez Wiciorny Ekspert (269,710 p.)
Nie masz elementu o Id: (css="#speed")
masz #speed-button #files oraz  #files-button

odwołujesz się nie po name- jako kontenerze, a po ID -> #, swoją drogą kontener ma name='speed' ale ty chcesz pobrać selecta, a nie element wraper.
komentarz 2 kwietnia 2022 przez blofeld Użytkownik (700 p.)

Nie upieram się. 

Może jestem w błędzie, uczę się dopiero, ale co to w takim razie jest ?

komentarz 2 kwietnia 2022 przez Wiciorny Ekspert (269,710 p.)

zgoda, teraz widzę dziękuje. jednak jak robisz findby 

@FindBy(cssSelector = "#speed")

jaki  błąd, i lub debuguj co zwraca Ci twój element WebElement selectSpeed;

po drugie 
to u mnie działa 
 

WebElement selectElement = driver.findElement(By.id("speed"));
Select selectObject = new Select(selectElement);

 

komentarz 2 kwietnia 2022 przez blofeld Użytkownik (700 p.)

Z samym kodem i lokatorem zasadniczo problemu nie ma. Tak jak pisałem kiedy jadę krok po kroku na samych selektorach, czyli że klikam w span button a potem w  dedykowany selektor elementu z listy to wszystko działa. Jednak tak jak pisałem, mam za zadanie obsłużyć to klasą Select. Według wszystkich podręczników i tutoriali robię ją przez

Select select = new Select(i tu wrzucam selektor elementu select). Jednak kiedy go wybiorę i potem wybieram np select.selectByIndex(0) otrzymuję :

org.openqa.selenium.ElementNotInteractableException: element not interactable: 
Element is not currently visible and may not be manipulated
  (Session info: chrome=99.0.4844.84)
Build info: version: '4.1.3', revision: '7b1ebf28ef'
System info: host: '1100KG3', ip: '192.168.1.24', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.13'
Driver info: org.openqa.selenium.chrome.ChromeDriver

 

komentarz 3 kwietnia 2022 przez Wiciorny Ekspert (269,710 p.)

Wychodzi troche brak zrozumienia z twojej strony po pierwsze masz obiekt selekt, ale generalnie on nie jest aktywny zanim ty chcesz wybrac odpowiedni element. 

pisałem o spróbowaniu 

new WebDriverWait(driver, 15).until(
            ExpectedConditions.elementToBeClickable(selectSpeed));
customerType.click(); 

teraz odwołaj się do obiektu ...
Jest jeszcze drugi sposób poczytaj chociaż nie polecam rozwiązania 
 

driver.switchTo().activeElement()

 

w momencie kiedy aktywujesz element 

komentarz 3 kwietnia 2022 przez blofeld Użytkownik (700 p.)

Rozumiem, że element nie jest aktywny w momencie obsługi.

Generalnie to próbowałem i  z debuggerem i ręcznie to wygląda tak jakby on nie był aktywny przez całą obsługę. Dodam, że sam wielokrotnie już obsługiwałem dropdowny na dziesiątkach różnych stron i nigdy nie miałem z tym problemu, jednak na nich elementy Select zawsze były aktywne. 

Co się tyczy kodu, to jeśli nawet wybieram 

new WebDriverWait(driver, 15).until(
            ExpectedConditions.elementToBeClickable(selectSpeed));

To i tak otrzymuję negatywa bo system pokazuje, że ten element się nie aktywuje bez względu na czas (ustawiłem na 60 sekund a i tak nie poszło). Nie idzie też jeśli najpierw ręcznie aktywuję element kliknięciem. Bo wtedy zamiast na 

System operuje mi na elemencie DIV :

0 głosów
odpowiedź 5 lipca 2023 przez SzymonDev Nowicjusz (140 p.)

Hej, odpowiem na to pytanie, bo sam szukałem odpowiedzi i nie mogłem jej znaleźc, a może kiedyś ktoś będzie szukał. 

Wszystko niestety sprowadza się do tego, że mam tutaj po prostu nieprawidłowo zaimplementowany element <select>. Na przyszłość można to zauważyć np po tym, że brakuje tu atrybutów "value" dla elementów listy*, czy np fakt, że selectByIndex(2) dla opcji która jest już zaznaczona działa i nie wyrzuca nam błędu. Ostatnia i chyba najważniejsza sprawa to fakt, że kod html nie zmienia się, gdy ręcznie klikamy w różne opcje, co znaczy, że sam <select> jest niezmienialny.

Koniec końców trzeba tu ominąć implementację przez element Select z biblioteki Selenium i pójść naokoło (może taki był zamiar zadania) :) 

We wcześniejszym ćwiczeniu(tak, też robię te same zadania), też mamy Select'a gdzie mamy wybrać randomową wartość i tutaj jest już wszystko ok, więc dla porównania implementacja w kodzie: 

* Nie jest to de facto błąd, ale to trop, że coś jest nie tak z implementacją elementu

Podobne pytania

0 głosów
0 odpowiedzi 206 wizyt
pytanie zadane 3 października 2019 w Java przez blofeld Użytkownik (700 p.)
0 głosów
1 odpowiedź 189 wizyt
0 głosów
0 odpowiedzi 89 wizyt
pytanie zadane 6 marca 2021 w Java przez blofeld Użytkownik (700 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...