Я использую Selenium с Java для автоматизации процесса, который я выполняю на работе. Он проходит через сайт поставщика компьютеров и отправляет гарантийный запрос. У меня много проблем с нажатием кнопки «Закрыть» во всплывающем окне. Приглашение появляется не всегда, и оно генерируется с помощью javascript. На самом деле я написал, и это работало в Python, но я студент колледжа, и в моей программе получения степени используется java, поэтому я хотел переключить его. Я также использую Google Chrome и Chromedriver.
Любая помощь приветствуется, я хотел бы попробовать еще кое-что. Мой следующий шаг после всего, что ниже, - это действие по перемещению мыши к кнопке, но я еще не изучал это.
ОБНОВЛЕНИЕ: мой метод checkIfExistsByXpath был неправильным, И мне нужно было 2 se c Thread. Спать(). Метод должен был быть:
public boolean checkIfExistsByXpath(WebDriver driver, String xpath){
try {
driver.findElement(By.xpath(xpath));
} catch (org.openqa.selenium.NoSuchElementException e){
e.printStackTrace();
return false;
} return true;
Не то, что у меня внизу.
То, что я пробовал:
У кнопки нет идентификатора. Я попытался получить значение по xpath с ожиданием, это дает мне исключение NoSuchElement и говорит, что это не правильный xpath. Я трижды проверил xpath, и он скопирован прямо из источника, я получаю то же исключение, используя метод checkIfExistsByXpath Я сделал:
WebElement okButton = new WebDriverWait(driver, 30).until(
ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"modalDuplicateDispatch\"]/div/div/div[3]/button")));
okButton.click();
Я попытался перевести поток в спящий режим (это сработало в Python), я также попробовал wait (5000):
Thread.sleep(5000);
WebElement okButton = new WebDriverWait(driver, 30).until(
ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"modalDuplicateDispatch\"]/div/div/div[3]/button")));
okButton.click();
Я попытался получить все элементы из класса и щелкните их каждый в al oop, это дало мне исключение elementClickIntercepted, я также пробовал это с модальным классом:
List<WebElement> buttonElements = driver.findElements(By.className("btn btn-primary"));
for (WebElement buttonElement : buttonElements) {
buttonElement.click();
}
Я пытался проверить, было ли это предупреждение поле, он пропустил это прямо, поэтому я не думаю, что это окно предупреждения:
if (isAlertPresent)(driver){
driver.switchTo().alert().accept();
}
if (isAlertPresent)(driver){
driver.switchTo().alert().dismiss();
}
Я пытался использовать Javascript Executor, я не помню точный код в верхней части моего head, но это тоже не сработало.
Функции для проверки наличия всплывающего окна
public boolean isAlertPresent(WebDriver driver){
try {
driver.switchTo().alert();
return true;
} // try
catch (NoAlertPresentException Ex) {
return false;
} // catch
} // isAlertPresent()
public boolean checkIfExistsByXpath(WebDriver driver, String xpath){
try {
driver.findElement(By.xpath(xpath));
return true;
} catch (NoSuchElementException e){
e.printStackTrace();
} return false;
}
HTML Класс с веб-страницы
<div class="modal" id="commonNotificationModal" style="display: none;">
<div class="modal-dialog fadeDown in" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="modal-header">
<button data-dismiss="modal" aria-label="Close" class="close" type="button">
<clr-icon aria-hidden="true" shape="close"></clr-icon>
</button>
<h3 class="modal-title"></h3>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>