Ошибка селена: такого элемента нет: невозможно найти элемент в методе .isDisplayed () - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть заявление if, которое вызывает у меня проблему. Если определенный выбор сделан в другом раскрывающемся списке, на странице отобразится второй раскрывающийся список и флажок. Приведенный ниже код работает, как и ожидалось, когда сделан выбор, который вызывает отображение этих двух элементов, но не работает, если сделан выбор, который не отображает их. Я получаю ошибку no such element: Unable to locate element. Сначала я думал, что это возвращает истину в любом случае, но проблема в том, что это сбой, потому что. Я даже добавил проверку при попытке присвоить значение логическому значению, но все равно получаю ту же ошибку.

boolean dropdown = driver.findElement(By.id("DROPDOWN")).isDisplayed(); получает ту же ошибку.

      if(driver.findElement(By.id("DROPDOWN")).isDisplayed()){

                driver.findElement(By.id("DROPDOWN")).click();
                driver.findElement(By.xpath("Choice in Drop DOWN)).click();
                driver.findElement(By.id("CheckBox")).click();  
     }

Ответы [ 3 ]

1 голос
/ 26 февраля 2020

В следующих ответах объясняется, как обрабатывать проверку существования элемента и обрабатывать исключение путем переноса в пользовательский метод.

Как проверить, существует ли элемент в c# Драйверы Selenium

Я бы также рекомендовал переписать ваш код следующим образом, чтобы избежать дублирования и избежать селекторов xpath. Использование findElement дважды для одного и того же контекста не обязательно, просто создайте переменную.

var dropdown = driver.findElement(By.id("DROPDOWN"));
if (dropdown.Displayed()) 
{
    var selectElement = new SelectElement(dropdown);
    selectElement.SelectByValue("valuehere");
}

Если вы используете текст, а не значение в поле выбора, вы можете использовать SelectByText ("texthere"); вместо SelectByValue.

1 голос
/ 26 февраля 2020

isDisplayed () будет работать, если элемент присутствует в DOM, за которым следует атрибут style: - display не должен быть ложным или отсутствовать.

Если предыдущее действие - выбор, который привел оба элемента к быть отображенным, это означает, что элемент находится в DOM, но который не будет виден. Таким образом, проверка условия видимости вернет u false.

Попробуйте подождать, пока элемент не станет видимым, и выполните для него операцию проверки, которая уменьшит задержку syn c.

WebDriverWait wait = new WebDriverWait (WebDriverRunner.getWebDriver (), 5); wait.until (ExpectedConditions.visibilityOfElementLocated ("By Locator"));

if (dropdown.isDisplayed()) 
   `````````// If the dropdown is tagged with <Select> tag
   ``````````` Select dropDown = new Select(dropdown);
    ```````````dropDown .selectByValue("value);

  ```````` // Else fetch the dropdown list item and store it in a list and iterate through and perform the desired action
    ```````````List<WebElement> dropDownList = new ArrayList<Webelements>;
    ```````````dropDownList.forEach(element -> {
        ```````````if(element.getText().equals("value")){
           ``````` ````element.click();
       ``````````` }
   ``````````` });

    ```````````driver.findElement(By.id("CheckBox")).click(); 
}    





1 голос
/ 26 февраля 2020

Метод findElement вызовет это сложное исключение - такого элемента нет, если элемент не найден. Просто включите обработку исключений для такого элемента, и ваша логика c будет работать нормально.

try{
if(driver.findElement(By.id("DROPDOWN")).isDisplayed()){

                driver.findElement(By.id("DROPDOWN")).click();
                driver.findElement(By.xpath("Choice in Drop DOWN)).click();
                driver.findElement(By.id("CheckBox")).click();  
     }
catch (NoSuchElementException e)
{
// I believe you dont have to do anything here. May be a console log will do.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...