Как преобразовать WebElement в строку для инструкции ‘if’ в selenium / Java

#java #string #selenium #if-statement #automation

#java #строка #селен #if-statement #автоматизация

Вопрос:

Я автоматизирую веб-магазин на selenium / Java. Если пользователь не выбрал размер продукта, появляется сообщение о том, что «это обязательное поле» рядом с размером. Я пытаюсь написать инструкцию ‘if’, которая утверждает, присутствует ли это сообщение, и действие, которое нужно предпринять, если оно есть, но я не могу заставить его работать. Это было бы что-то вроде этого:

  WebElement sizeIsRequiredMsg = driver.findElement(By.cssSelector("#advice-required-entry-select_30765)"));
 WebElement sizeSmallButton = driver.findElement(By.cssSelector("#product_info_add > div.add-to-cart > div > button"))

          if (sizeIsRequiredMsg.equals("This is a required field.")) {
              action.moveToElement(sizeSmallButton);
              action.click();
              action.perform();
        }
  

Я попробовал несколько разных вариантов, используя сообщение ‘это обязательное поле’ в качестве веб-элемента. Не уверен, нужно ли мне каким-то образом преобразовать WebElement для сообщения в строку? Или включить логическое значение? Кто-нибудь может помочь?

Комментарии:

1. Возвращаемый тип переменной sizeIsRequiredMsg — WebElement, поэтому вы не можете сравнить WebElement со строкой, поэтому вам нужен метод sizeIsRequiredMsg.getText() для извлечения текста, после чего вы можете сравнить две строки.

Ответ №1:

Попробуйте использовать getText() что-то вроде этого:

РЕДАКТИРОВАТЬ Я добавил правильные cssSelectors и добавил try catch :

 WebElement addToCartButton = driver.findElement(By.cssSelector("#product_info_add  button")); 
action.moveToElement(addToCartButton); 
action.click(); 
action.perform(); 

try {
    WebElement sizeIsRequiredMsg = driver.findElement(By.cssSelector(".validation-advice"));
    WebElement sizeSmallButton = driver.findElement(By.cssSelector(".swatches-container .swatch-span:nth-child(2)"))
    if (sizeIsRequiredMsg.getText() == "This is a required field.") {
          action.moveToElement(sizeSmallButton);
          action.click();
          action.perform();
    }

} catch (Exception e) {
    System.out.println(e);
    logger.log(Level.SEVERE, "Exception Occured:", e);
};
  

Надеюсь, это поможет вам!

Комментарии:

1. Это выполняется сейчас, но по-прежнему не выполняет то, что я хочу (нажмите кнопку «Размер маленький»). В любом случае спасибо 🙂

2. ‘org.openqa.selenium. Исключение InvalidSelectorException: недопустимый селектор: был указан недопустимый селектор ‘

3. @golfumbrella убедитесь, что вы импортировали action = import org.openqa.selenium.interactions.Actions; и создали новую переменную Action = Actions action;

4. @golfumbrella вы можете связать действие следующим образом: action.moveToElement(sizeSmallButton).click().perform();

5. Да, я все это сделал. Я думаю, проблема все еще заключается в том, что он читает текст «это обязательное поле». Я не уверен, что использую правильный селектор, но, похоже, я перепробовал их все