检测元素并在Selenium中的标签<canvas>上单击此元素?

时间:2016-07-21 08:17:55

标签: c# selenium canvas

网站只有一个标签,它包含所有元素。

我想点击此画布中的元素。

我尝试使用代码:

public void ClickCanvas(QA.IWebElement wbCanvas, int x, int y)
{
    try
    {
        QA.Interactions.Actions actionBuilder = new QA.Interactions.Actions(wd);
        Actions hoverClick = actionBuilder.MoveToElement(wbCanvas).MoveByOffset(x, y).ContextClick();
        hoverClick.Build().Perform();
    }
    catch { throw; }
}

我使用这个功能:

var width = int.Parse(browser.FindElementById("easCanvas").GetAttribute("width"));
var height = int.Parse(browser.FindElementById("easCanvas").GetAttribute("height"));
for (int i = 0; i < height; i += 5)
{
    for (int j = 0; j < width; j += 5)
    {
        browser.ClickCanvas(browser.FindElementById("easCanvas"), j,i);
    }
}

它仅在浏览器的屏幕中心进行扫描。必须从屏幕的Point(0,0)开始,而不是从屏幕中心开始。

我不知道何时点击了一个元素。

解决:

在selenium文件中,

  

moveToElement(WebElement toElement):将鼠标移动到元素的中间

     

moveToElement(WebElement toElement,int xOffset,int yOffset):将鼠标移动到元素左上角的偏移处。

我的问题有原因:

  

它仅在浏览器的屏幕中心进行扫描

我需要在(0, 0)位置从元素的开头开始。

应改为:

Actions hoverClick = actionBuilder.MoveToElement(wbCanvas, 0, 0).MoveByOffset(x, y).ContextClick();

  

我不知道什么时候点击了一个元素。

在我的网站中,我测试点击元素时会打开一个新的弹出窗口,这个弹出窗口包含<iframe>标记。

我需要添加代码:

while(browser.FindElementById("iframe_D") == null)
     Thread.Sleep(50);
if(browser.FindElementById("iframe_D") != null)
     browser.GoToFrame(browser.FindElementById("iframe_D"));

这对我有用。

1 个答案:

答案 0 :(得分:1)

这可能很奇怪,但尝试使用减号数字,看看会发生什么。

最近我的一个项目对我有用。