Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Resolved] Selenium IDE: Threw an exception... is not defined


(Aleksey Krekotnev) #1

Коллеги, доброго четверга!
Решаю простую задачу: взять имя пользователя в личном кабинете и сравнить с тем, что отображается на произвольной странице в соответствующем поле.
Значения получаю - команда echo свидетельствует об этом. Вот табличная структура совокупности команд:

open | /o-firme/
type | name=UserLogin[login] | (имя пользователя)
type | name=UserLogin[password] | (пароль)
clickAndWait | name=submit
open | (адрес)
storeText | //*[@id='viewprofile']/p[1]/span | a
echo | ${a}
open | (адрес)
storeText | //*[@id='cc-user']/div/b | b
echo | ${b}
storeEval | (${a}==${b})? true:false | result
assertEval | ${result} | true

Завал происходит на строке:

storeEval | (${a}==${b})? true:false | result

Сообщение в логах:
[error] Threw an exception: \u0410\u043B\u0435\u043A\u0441\u0435\u0439 is not defined

Помогите разобраться, пожалуйста!


(Stan) #2

\u0410\u043B\u0435\u043A\u0441\u0435\u0439 == Алексей

видимо, это UserLogin ?


(Aleksey Krekotnev) #3

Алексей - это имя пользователя, которое отображается в личном кабинете.
UserLogin == почта пользователя.
Echo переменных a и b выводит сообщение о том, что имя подтягивается…


(Stan) #4

ну судя по ошибке, “Алексей” воспринимается как имя переменной. Приведи код?


(Aleksey Krekotnev) #5

В формате JUnit4 (WebDriver):

package com.example.tests;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class LKNameOfUser {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://www.ИмяСайта.ru/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void testLKNameOfUser() throws Exception {
    driver.get(baseUrl + "/o-firme/");
    driver.findElement(By.name("UserLogin[login]")).clear();
    driver.findElement(By.name("UserLogin[login]")).sendKeys("...@...ru");
    driver.findElement(By.name("UserLogin[password]")).clear();
    driver.findElement(By.name("UserLogin[password]")).sendKeys("...");
    driver.findElement(By.name("submit")).click();
    driver.get("http://...");
    String a = driver.findElement(By.xpath("//*[@id='viewprofile']/p[1]/span")).getText();
    System.out.println(a);
    driver.get("http://www....ru/o-firme/");
    String b = driver.findElement(By.xpath("//*[@id='cc-user']/div/b")).getText();
    System.out.println(b);
    // ERROR: Caught exception [ERROR: Unsupported command [getEval | (${a}==${b})? true : false | ]]
    // ERROR: Caught exception [ERROR: Unsupported command [getEval | ${result} | ]]
    driver.findElement(By.linkText("Выход")).click();
  }

  @After
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}

(Aleksey Krekotnev) #6

Код сбросил - такой нужен?


(Руслан) #7

а где сам AssertEquals ?
странно конечно выглядит, как перевод кода из Selenium IDE :))


(Artur Korobeynyk) #8

Не знаю я всего этого синтаксиса, но может угадаю.
(${a} == ${b}) что если заменить на (a == b) ?


(Stan) #9

я так понимаю (${a}==${b}) внутри коммента находятся. Я если честно так и не понял где они сравниваются.


(Aleksey Krekotnev) #10

Да, так и есть. Сначала на Selenium проверяю пошаговку. Работает - переопределяю формат в JUnit4 :slight_smile:


(Aleksey Krekotnev) #11

AssertEquals есть. Просто до него даже дело не доходит. Перед ним валится вышеуказанный участок ((


(Stan) #12

так скинь нормальный полный код…


(Aleksey Krekotnev) #13

@arturk
Попробовал. судя по сообщению об ошибке, теперь переменная “а” вовсе не определяется. Хотя echo показывает, что значение в нее помещается:

Threw an exception: a is not defined

@st_eremin
В пошаговке Selenium они сравниваются сразу после того, как переменная b получает свое значение. При этом используется команда storeEval, которая, кстати, почему-то не поддерживается:

/ ERROR: Caught exception [ERROR: Unsupported command [getEval | (${a}==${b})? true : false | ]]

На счет коммента, сори, не понял :frowning:


(Artur Korobeynyk) #14

Причина скорее всего в том, что вы сравниваете

Алексей == Алексей

а не

"Алексей" == "Алексей"

Я не помню синтаксиса джавы и уж тем более никогда не учил таблицы IDE, но может стоит как-то определить переменные a b перед присваиванием… или сравнивать как-то

"${a}" == "${b}"

Не знаю, можно ли так записать в IDE


(Aleksey Krekotnev) #15

Коллеги, всем спасибо! Все дело в том, что надо было прописывать так:

('${a}'==='${b}')? true : false

Одинарные кавычки, Дьявол кроется в деталях.
Финальный звук бубна…


(Artur Korobeynyk) #16

Ну а я ещё посмтрел в документацию и должно сработать так
storedVars[‘a’] == storedVars[‘b’]