当前位置: 首页 > 知识库问答 >
问题:

用硒在画布上作画

章烨烨
2023-03-14

我正在使用硒与Java(最新的两个)。试图在我们的WebApp中的一个模式内的一个小画布区域上进行绘制。我们用来画布的库是'Signature pad JS'。我已经确认了它不是在iframe或任何可能出现问题的棘手的东西(它只是一个带有div.signature-input canvas元素的常规div.modal-body)。

但它什么也没做。我在这里看了很多stackoverflow的帖子,大多数看起来都很相同,只有很少的变化可以尝试(我一直都在尝试它们)。

下面是我尝试的最新代码://绘制某种类型的签名

WebElement元素=driver.findElement(使用.locator(SIGNATURE_AREA));//画布元素

Actions builder=新操作(驱动程序);Builder.ClickAndHold(元素).MoveByOffset(10,50).moveByOffset(50,10)。moveByOffset(-10,-50)。moveByOffset(-50,-10)。释放()。执行();

我试过各种补偿方法,但都没有效果。如果有人有这方面的经验,真的会很乐意帮忙。

共有1个答案

郎雪风
2023-03-14

我想你的问题出在代码上,我已经用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为你做同样的事情,它的工作很好,它画出了预期的两条线。诀窍是moveby后面不应该点击,否则它会分散焦点。下面的代码在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();

    }

}

如果成功了就告诉我!

 类似资料:
  • 问题内容: 尝试使用awt canvas上的鼠标来绘制图形(目前为线)。Iam首次尝试Java图形。所以不确定如何去做。这是我的第一次尝试: 问题:1)将窗口最小化并还原后,绘制的线条消失了(由于要重新绘制)2)我要的是该线条应跟随鼠标移动(拖动时)。最后一行应该从按下位置到释放鼠标的位置。现在请礼节,当鼠标移动时,将绘制新的线条。我不确定如何清除画布上的中间线。 有人可以帮我解决这些问题吗? 问

  • 在画布上画画是非常好的。即使橡皮擦也能工作得很好。问题是当画布保存为图像时,它画的是黑线,而不是橡皮擦。 为了更好地理解,我添加了屏幕、镜头和代码。 1.在擦除图的同时- 我不明白为什么橡皮移动被替换为黑色,而保存画布作为一个图像。

  • 5.2.3 在画布上绘图 本节介绍如何在画布上绘制图形。为了完整起见,我们将前面介绍过的首先需要执行的 几条语句合在一起复制如下: >>> from Tkinter import * >>> root = Tk() >>> c = Canvas(root,width=300,height=200,bg='white') >>> c.pack() 如前所述,c 是一个画布对象,而画布对象提供了若干

  • 有人能澄清我的一些困惑吗? 有可能在画布的顶部有html吗?我一直在读,你不能有GUI元素,比如带画布的Jquery,但是我读到你可以在画布上有HTML,为什么你可以有一个却没有另一个? 理想情况下,我最终想要的是在画布顶部有一个好的GUI,所以只需要知道什么是可能的,什么是不可能的。

  • 在IE9画布中现在是否支持虚线/点线?目前我正在做与以下内容非常相似的事情: 这在IE7、IE8、IE9兼容模式和FireFox中工作很好,然而,在IE9和Chrome中,为每条虚线绘制一个实心笔画。 对为什么会发生这种情况有什么想法吗?