Подождите, пока elementToBeClickable не будет решением для другого элемента, получит исключение нажатия - PullRequest
0 голосов
/ 17 мая 2018

Вчера я задаю вопрос, как поступить: «Элемент не активен в момент нажатия - другой элемент получит исключение« щелчок »в Selenium WebDriver.

Я получаю несколько ответов с этим решением:

WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(...));

Да, это имеет смысл, но на практике это не работает. Ниже приведен фрагмент моего кода:

                JavascriptExecutor js = (JavascriptExecutor) driver;
            js.executeScript("arguments[0].scrollIntoView();", categoryItem);
            Thread.sleep(1000);
            new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(categoryItem));
            categoryItem.click();
            List<WebElement> selects = driver.findElements(By.tagName("select"));
            Select ticketsSelect = new Select(selects.get(3));
            ticketsSelect.selectByValue("2");

            By addToBasket = By.xpath("//div[contains(text(),'Add to Basket')]");
            Thread.sleep(1000);
            new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(addToBasket));
            driver.findElement(addToBasket).click();

Мне приходилось помещать 1 секунду в спящий режим перед каждым ожиданием, пока элемент не станет активным, потому что без этого он по-прежнему вызывает исключение, что другой элемент получит щелчок. У меня вопрос, почему WebDriver щелкает этот элемент, если элемент не активен?

1 Ответ

0 голосов
/ 17 мая 2018

ElementToBeClickable - Ожидание проверки элемента является видимым и включено, так что вы можете щелкнуть по нему.

Но, похоже, это не означает, что этот элемент не «скрыт» под каким-либо другим элементом, даже если он является прозрачной частью другого тега. По моему опыту, это исключение чаще всего возникает, когда вы пытаетесь взаимодействовать со страницей, которая в данный момент загружается, и у вас есть типичный загрузочный div, перекрывающий всю страницу со значком загрузки, или в других случаях, когда у вас есть открытый модал, который также часто закрывают страницу прозрачными наложениями, чтобы пользователь не мог взаимодействовать со страницей.

В этом ответе вы можете видеть, что у вас есть два варианта:

  1. Вы можете отправить событие клика через вызов JavaScript. Это всегда будет работать, но это не то, что вы хотите сделать. Если вы хотите проверить свою страницу, вы всегда должны запускать события реального клика.
  2. Wait. Там не так много, вы можете сделать. Что-то, что вам просто нужно дождаться полной загрузки вашей страницы. В некотором смысле, возможно, это покажет вам медленные части вашего приложения, которые вы можете улучшить в будущем
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...