Селен | Ошибка элемента не взаимодействует: изучены все варианты переполнения стека - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь получить все выпадающие списки с веб-страницы и выбрать из них значение в одном go. Я приложил фрагмент кода, который получает все выпадающие списки, которые загружаются и находятся под тегом на веб-странице. Я хочу получить доступ к дочерним элементам каждого тега ul, которые находятся под тегом li, и щелкнуть по любому из этих дочерних элементов.
Я прилагаю снимок экрана, снятый с веб-сайта. Он всегда говорит, что элемент не взаимодействует, хотя он является кликабельным элементом. Пожалуйста, помогите.

Снимок экрана приложения

Код:

List<WebElement> dropDowns = webDriver.findElements(By.xpath("//ul[contains(@class,'dropdown')]"));
try{Thread.sleep(5000);}catch (Exception e){};
 for(WebElement webElement : dropDowns){
            try{
                List<WebElement> elementList = webElement.findElements(By.xpath("//ul[contains(@class,'dropdown')]//li"));
                for (int i = 0 ; i < elementList.size();i++){
                    elementList.get(i).click();
                    Thread.sleep(3000);
                }
            }
            catch (Exception e){
                System.out.println("-----------Error----------");
                continue ;
            }
            }
            try{Thread.sleep(10000);}
            catch (Exception e){}
            webDriver.quit();
        }

1 Ответ

0 голосов
/ 05 апреля 2020

Я вижу ниже проблемы в вашем коде.

  • Вы пытаетесь использовать список webElement из dropDowns, который будет исключать устаревшие элементы, если вы используете webElement в поле для l oop.
  • Ваш код будет выполнять операцию с первой операцией на первом dropdwn все время, так как вы не получаете спад на основе индекса.
  • вы упомянули, что хотите выберите элемент в списке, но вы нажимаете на каждый элемент в раскрывающемся списке.

Пожалуйста, попробуйте с приведенными ниже логами c.

int dropDowns = webDriver.findElements(By.xpath("//ul[contains(@class,'dropdown')]")).size();
try{Thread.sleep(5000);}catch (Exception e){};
JavascriptExecutor js = (JavascriptExecutor) webDriver;
for(int dropdownIndex =0; dropdownIndex < dropDowns; dropdownIndex++){
            WebElement dropdown = webDriver.findElements(By.xpath("//ul[contains(@class,'dropdown')]")).get(dropdownIndex);
            try{
                List<WebElement> elementList = dropdown.findElements(By.xpath(".//li"));
                for (int i = 0 ; i < elementList.size();i++){ // not sure if you really want to click each item in the dropdown, hence not modified this part.
                    WebElement item = elementList.get(i);
                    js.executeScript("arugments[0].click()",item);
                    Thread.sleep(3000);
                }
            }
            catch (Exception e){
                System.out.println("-----------Error----------");
                continue ;
            }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...