Я пытаюсь найти элемент в блоке else, если условие в блоке if не работает.
try
{
if (Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']")).isDisplayed())
{
System.out.println("Payment is successful");
Reporter.log("Payment is successful");
}
else
{
Thread.sleep(2000);
{
if (Driver.driver.findElement(By.id("pay_decline")).isEnabled())
{
System.out.println("pay declined");
action.moveToElement(By.id("pay_decline")).isEnabled()).click().perform();
Reporter.log("PAYMENT DECLINED!!");
}
}
catch(ExceptionInInitializerError ex)
{
System.out.println(ex);
}
}
Я получаю сообщение об ошибке:
Unable to locate element: {"method":"xpath","selector":"//div[@id='Tpay_succes']"}
Я хочу, чтобы блок else выполнялся, если блок if не выполняется. Любые предложения приветствуются. Спасибо.
код трудно читать, учитывая формат/отступ (в конечном итоге часть проблемы, о которой мы не знаем). Пример заключает в скобки ту же строку после else
и перед if
@KorayTugay я отредактировал это
«Я хочу, чтобы блок else выполнялся, если блок if не выполняется». Именно так работает if...else.
@Code-Apprentice и он не работает.
все еще не правильно, скобка в конце секунды if
, и вообще закрытие не соответствует открытию, как и отступ
if (Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']")).isDisplayed())
Это не работает так, как вы думаете. findElement()
выдаст ошибку, если элемент отсутствует в DOM текущей загруженной страницы. Это означает, что isDisplayed()
в таком случае вызываться не будет.
Вы можете делать что хотите с try...catch
:
try
{
Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']"))
System.out.println("Payment is successful");
Reporter.log("Payment is successful");
} catch(ExceptionInInitializerError ex) {
Thread.sleep(2000);
if (Driver.driver.findElement(By.id("pay_decline")).isEnabled()) {
System.out.println("pay declined");
action.moveToElement(By.id("pay_decline")).isEnabled()).click().perform();
Reporter.log("PAYMENT DECLINED!!");
}
}
Обратите внимание, что вам следует узнать, как заставить драйвер селена ожидать определенного элемента, а не использовать Thread.sleep()
.
Спасибо за ответ. Другая проблема, с которой я сталкиваюсь, заключается в том, что к тому времени, когда он достигает блока catch, становится слишком поздно, что означает, что кнопка отправки с div id='Tpay_success' в блоке catch теряется, когда она достигает его. . Есть ли способ сделать это быстрее, я удалил метод Thread.sleep().
действительно ли этот Добрый отступов и использования скобок используется с селеном? открытие/закрытие иногда на дополнительной строке, иногда на той же строке; открытие не соответствует закрытию ни отступа??? это так сбивает с толку
Отступ не имеет большого значения в Selenium, но, поскольку я использую Java, по этой причине нужны скобки.
это не имеет значения и в Java, но важно для легкого чтения/понимания (почти любого языка программирования) - и я сомневаюсь, что в Selenium вам не нужно сопоставлять открывающую и закрывающую скобки; например открытие в конце if
, закрытие на том же уровне отступа, что и catch
(который сам по себе не закрывается)
Да, Селену ничего подобного не нужно, и я исправил.
@CarlosHeuberger Этот отступ в этом ответе представляет собой гибрид между копированием / вставкой из OP и моим редактированием, включая ошибочную отсутствующую закрывающую скобку.
Какой у Вас вопрос?