2013-08-15 2 views
4

Я немного поучаствовал в этом, но не смог найти что-то конкретное. У меня есть объект canvas, с которым мне нужно взаимодействовать, с Selenium. Однако, как мы все знаем, объекты холста подобны закрытой коробке. Я прочитал, что вы можете добавить «крючки» в код JS, который рисует внутри холста, чтобы позволить Selenium поймать эти крючки и работать с определенными вещами.Взаимодействие с холстом с селеном

Но я не уверен, как я могу это сделать. Есть ли у кого-нибудь опыт или небольшой пример, который они хотели бы поделиться?

ответ

1

Я также изучал ту же проблему, после того как я искал какое-то время, я понял, что Selenium обращается к элементу холста. но он не может получить доступ к внутренним элементам/дочерним элементам. Потому что селен использовал DOM-модель и дочерние элементы холста, которые не видны в DOM. Изучив один пример, упомянутый here, мы можем взаимодействовать с холстом, используя координаты. Но это абсурдно, в большинстве случаев мы будем динамически рисовать элементы и как мы можем получить координаты в форме суставной фигуры. Если у вас есть координаты фигур, вы можете играть с ними, используя ссылку выше.

+1

Да, объект Холста оказался настоящей болью. В итоге я собрал настройку проверки экрана, которая работает с сохраненными изображениями. Вы можете проверять конкретную часть экрана (холст). Это, кажется, достаточно хорошо работает на практике, если приложение не испытывает слишком много графических изменений – checkdgt

0

попробуйте это, это сработало для меня. Это нарисует круг на id 'canvas'.

public function testDraw() { 
     try { 
      $this->execute(array('script' => " var c = document.getElementById('canvas'); 
      var ctx = c.getContext('2d'); 
      ctx.beginPath(); 
       ctx.arc(100, 75, 50, 0, 2 * Math.PI); 
       ctx.stroke();", 
       'args' => array())); 

      echo 'done'; 
      sleep(10); 
     } catch (Exception $ex) { 
      echo 'not done'; 
     } 
Смежные вопросы