Временный элемент CSS скрывает элемент xpath, на котором я хочу щелкнуть.
Использование Selenium в Visual Studio Я пишу тестовый сценарий, в котором нужно щелкнуть элемент.Но когда я запускаю этот тестовый пример, я получаю сообщение об ошибке, в котором говорится:
OpenQA.Selenium.ElementClickInterceptedException Element <a href="#/app/customer/handling/devices"> is not clickable at point (105,221) because another element <div class="showbox layout-align-center-center layout-row ng-star-inserted"> obscures it
Затеняющий элемент выглядит как элемент CSS.Но когда я захожу на эту страницу вручную, проверяю код и ищу этот элемент css <div class="showbox layout-align-center-center layout-row ng-star-inserted">
Я не получаю результатов.
Поэтому я предполагаю, что этот элемент CSS является временным и может быть идентифицирован только для парысекунд, пока страница загружается.Это предположение подтверждается тем фактом, что если я добавлю метод статического ожидания Task.Delay(4000).Wait();
в этот тестовый сценарий, я смогу завершить этот тестовый сценарий.
Но меня не интересует решение, в котором я использую статическое ожиданиеметод в моем коде.Я хочу дождаться исчезновения временного css, чтобы я мог щелкнуть по желаемому элементу xpath.
Это мой код:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div class='showbox layout-align-center-center layout-row ng-star-inserted'")));
//Waiting for temporary CSS element to be visible
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.CssSelector("div class='showbox layout-align-center-center layout-row ng-star-inserted'")));
//Waiting for temporary CSS element to disappear
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div/div[2]/nav[2]/div/ul/li[1]/a"))).Click();
//Click on "Handle Tools" link
Как вы можете прочитать в комментарияхв моем коде я делаю три вещи здесь:
1. I wait for the temporary CSS to be loaded
2. I wait for it to disappear
3. I click on the xpath element.
Когда я делаю это, я получаю сообщение об ошибке, сообщающее, что селектор CSS, который я пытаюсь найти, недействителен.
Если я пропускаюПервый шаг и просто подождите, пока CSS исчезнет / станет «невидимым», он проверит это слишком быстро и посмотрит, прежде чем элемент CSS начал загружаться.
Так что либо я неправильно пишу формат By.CssSelector,Или элемент CSS называется как-то иначе, чем Visual Studio вызывает его в сообщении об ошибке, которое я цитировал выше.
Поэтому, пожалуйста, скажите мне, если я использую неправильный способ идентификации этого элемента CSS здесь:
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.CssSelector("div class='showbox layout-align-center-center layout-row ng-star-inserted'")));
ИЛИ
Есть ли другой способ динамического ожидания временных элементов CSS?
ИЛИ
Можно ли как-то подтвердить, что имя скрывающего элемента CSSна самом деле называется "div class = 'showbox layout-align-center-center layout-row ng-star-вставлен'"?