selenium通过js脚本操作canvas元素的几种方法

1、

# canvas绘图
def painting_canvas(driver):
    driver.execute_script(var s=document.getElementsByClassName("signature-pad--body")[0];#signature-pad--bod为绘图页的元素ClassName
                          + var c=s.getElementsByTagName("canvas")[0];
                          + var ctx=c.getContext("2d");#2维
                          + ctx.font="100px Arial";#像素大小
                          + ctx.fillText("Lucky me",100,200);)#为输入内容和坐标

2、

背景: 页面中的表格都是用canvas画出来的,导致无法定位到canvas里面的内容,但是点击的内容可以从双击后的详细页面获取.

解决方案

通过canvas标签元素的坐标位置的相对位置来点击canvas中的任何一条记录后进入到详情页面再获取详情页中的元素信息.

actions = ActionChains(self.webdriver)
actions.move_to_element_with_offset(el, 102, 35).context_click().perform()
#el是canvas标签元素,102和35是相对于canvas的相对便宜量.

注意:

move_to_element_with_offset()方法和 move_by_offset()方法的区别
前者是移动鼠标到某个元素的相对便宜量位置,后者是移动鼠标到鼠标当前位置的便宜量位置.

3、[Selenium] 操作 HTML5 中的 Canvas 绘制图形

以 Chrome Driver 为例阐述,通过 Actions 在 Canvas 上绘制一个封闭图形。对于 Canvas 上的操作,推荐 Chrome Driver 或 Firefox Driver

示例:

package com.learningselenium.html5;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.interactions.Actions;

public class testHTML5Canvas{

  WebDriver driver;

  @Before

  public void setUp() throws Exception{

    System.setProperty("webdriver.chrome.driver", "/Selenium 2/selenium/chromedriver");

    driver = new ChromeDriver();

    driver.get("http://literallycanvas.com/");

  }

  @Test

  public void testHTML5Canvas() throws Exception{

    //元素不存在,有问题 “div.literally.index div.lc-drawing canvas”

    WebElement canvas = driver.findElement(By.xpath("//*[@id = "about"]/div[1]/canvas"));   

    Actions drawing = new Action(driver);

    //绘制图形

    driver.clickAndHold(canvas).moveByOffset(10,50).moveByOffset(50,10).moveByOffset(-10,-50).moveByOffset(-50,-10).release().perform();

  }

  @After

  public void tearDown() throws Exception{

    driver.quit();

  }

}

经验分享 程序员 微信小程序 职场和发展