Рисуем на холсте с помощью селена - PullRequest
0 голосов
/ 18 марта 2019

Я использую селен с Java (последний для обоих). Попытка нарисовать на небольшой области холста внутри модального в нашем веб-приложении. Библиотека, которую мы использовали для нашего холста, была 'signature pad js'. Я подтвердил, что проблема не в iframe или в хитросплетениях, которые могут быть проблемой (это просто обычное тело div.modal с элементом canvas div.signature-input).

Но он ничего не делает. Мы просмотрели здесь много постов на stackoverflow, и большинство из них выглядят довольно идентично с несколькими вариантами, чтобы попробовать (я пробовал их все).

Вот последний код, который я пробовал: // Нарисовать какую-то подпись

Элемент WebElement = driver.findElement (Using.locator (SIGNATURE_AREA)); // элемент canvas

Actions builder = новые действия (драйвер); builder.clickAndHold (element) .moveByOffset (10, 50). moveByOffset (50,10). moveByOffset (-10, -50). . MoveByOffset (-50, -10) .release () выполняет ();

Я пробовал все виды смещений, и такие безрезультатно. Если у кого-то есть опыт с этим, очень бы понравилась рука.

1 Ответ

2 голосов
/ 18 марта 2019

Я думаю, что ваша проблема в коде, я сделал это с ruby, и он работал нормально .. Код в Ruby ниже (работал в FireFox)

driver.find_element(:xpath, "html/body/div[1]/div[5]/div[2]/canvas").click
  element = driver.find_element(:xpath, "html/body/div[1]/div[5]/div[2]/canvas");
  driver.action.move_to(element).perform
  driver.action.click_and_hold(element).perform
  driver.action.move_by(150, 50).click.perform
  driver.action.move_to(element).perform
  driver.action.click_and_hold(element).perform
  driver.action.move_by(100, 50).click.perform
  driver.action.move_to(element).perform
  driver.action.click_and_hold(element).perform
  driver.action.move_by(300, 10).click.perform
sleep (5)

Итак, я попробовал то же самое, используя Java для вас, и он работает нормально, он рисует две линии, как и ожидалось. Хитрость в том, что за движением не следует нажимать, иначе он потеряет фокус. Ниже код работает нормально в Java и Chrome. Я использовал https://sketchtoy.com/ для рисования на холсте

public class BrowserTesting {
    WebDriver driver;
    @Test
    public void test1() throws InterruptedException {
        //WebDriverManager.chromedriver().setup();
        System.setProperty("webdriver.chrome.driver","C:\\Users\\pathtyourchrome\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("useAutomationExtension", false);
        //disable automation info bar
        options.addArguments("disable-infobars");
        driver = new ChromeDriver(options);
        driver.get("https://sketchtoy.com/");

        WebElement element = driver.findElement(By.xpath("//div[@class='sketch-canvas-container']/canvas"));//canvas element
        Actions builder = new Actions(driver);
        builder.moveToElement(element).perform();
        builder.clickAndHold(element).perform();
        builder.moveByOffset(150, 50).perform();
        builder.moveToElement(element).perform();
        builder.clickAndHold(element).perform();
        builder.moveByOffset(100, 50).perform();
        builder.moveToElement(element).perform();




        Thread.sleep(5000);
        //driver.quit();

    }

}

См. Этот снимок экрана для рисунка: Sketch Drawing

Дайте мне знать, если это сработало!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...