Selenium (Java): метод dndScript () не определен

Я пытаюсь проверить, что старый демонстрационный сценарий Selenium от бывшего коллеги все еще работает, но столкнулся с любопытной ошибкой. К сожалению, коллеги уже нет рядом, чтобы посоветоваться. Во-первых, вот рассматриваемый скрипт, который должен перетаскивать один элемент поверх другого на странице:

import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.Supplier;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import org.junit.Assert;
import org.junit.jupiter.api.Test;

public class DragNDrop {
    
    @Test
    public void testDragAndDropWithCheck() throws InterruptedException {
        
        System.setProperty("webdriver.gecko.driver","D:\\WebDriver\\geckodriver.exe");
        WebDriver driver=new FirefoxDriver();

        driver.get("https://the-internet.herokuapp.com/drag_and_drop");

        By css = By.cssSelector("div[id^=\"column-\"]");
        WebDriverWait wait = new WebDriverWait(driver, 10);
        
        Supplier<List<WebElement>> fetchComponents = () -> wait
                .until(ExpectedConditions.presenceOfAllElementsLocatedBy(css));
        /**
         * Starting check for element position
         */
        List<WebElement> startingCheck = fetchComponents.get();

        Assert.assertEquals("Starting - Draggable number does not match!", 2, startingCheck.size());
        Assert.assertEquals("Starting - A position does not match!", "A", startingCheck.get(0).getText());
        Assert.assertEquals("Starting - B position does not match!", "B", startingCheck.get(1).getText());

        int index = ThreadLocalRandom.current().nextInt(startingCheck.size());
        WebElement from = startingCheck.get(index);
        WebElement to = startingCheck.get(1 - index);

        JavascriptExecutor jse = (JavascriptExecutor) driver;

        jse.executeScript(
            dndScript() + "simulateDragAndDrop(arguments[0], arguments[1])",
            from,
            to);
        /**
         * Ending check for element position
         */
        List<WebElement> endingCheck = fetchComponents.get();

        Assert.assertEquals("Ending - Draggable number does not match!", 2, endingCheck.size());
        Assert.assertEquals("Ending - A position does not match!", "A", endingCheck.get(1).getText());
        Assert.assertEquals("Ending - B position does not match!", "B", endingCheck.get(0).getText());
    }

}

Проблема в этой части:

jse.executeScript(
    dndScript() + "simulateDragAndDrop(arguments[0], arguments[1])",
    from,
    to);

Eclipse выделил dndScript () и выдал сообщение:

Метод dndScript () не определен для типа DragNDrop.

Сначала я подумал, что это произошло из-за отсутствия импорта, поэтому мне пришлось поискать в Google, но я не могу найти никакой информации об этом. Максимум, что я смог найти, - это ссылки на что-то под названием RichFaces, но я не смог найти никаких дополнительных разъяснений (может быть, я сам виноват - я ни в коем случае не эксперт по Selenium / Java).

Есть идеи, что это за история с этой функцией и как правильно реализовать ее в этом скрипте?


person James Panetti    schedule 17.11.2020    source источник
comment
Вам нужна там веревка. Просто создайте свой dndScript как строковую переменную и передайте ее вместо несуществующего метода.   -  person pcalkins    schedule 17.11.2020


Ответы (1)


Вряд ли это связано с отсутствующим импортом (вероятно, статическим). Поскольку это просто имя метода, может быть три случая:

  1. Это статический метод в рамках какого-то другого класса и обычно импортируется с помощью статического импорта.
  2. Это метод, который должен быть реализован в рамках вашего текущего класса.
  3. Это метод, который должен быть реализован в рамках родительских классов.

Причина того, что у вас есть в настоящее время, заключается в том, что код вашего текущего класса изменился с того времени. Вам необходимо проверить историю изменений, если вы взяли этот код из системы контроля версий.

Есть несколько возможных историй, которые кажутся возможными:

  • В рамках текущего класса был метод, а затем он был перемещен в какой-то родительский класс. По какой-то причине кто-то забыл добавить ключевое слово extends в текущий класс.
  • Был метод в рамках родительского класса. После этого кто-то решил разорвать отношения между классами и забыл переместить этот метод в ваш текущий класс.
  • В каком-то другом классе был статический метод. Он был импортирован в текущий класс как static import. Затем кто-то загрузил этот класс в IDE и не добавил этот другой класс в путь к классам проекта. Затем они применили функцию организации импорта, которая удалила этот прерванный импорт из вашего текущего класса.
person Alexey R.    schedule 17.11.2020
comment
Понятно, спасибо за объяснение! К сожалению, это был фрагмент кода, опубликованный в сообщении в блоге, без полного исходного кода. Меня технического писателя попросили обновить сообщение и убедиться, что образец кода все еще действителен, но, поскольку это все, с чем мне осталось работать, кажется, мне немного не повезло. - person James Panetti; 20.11.2020