硒移动鼠标不适用于低分辨率

时间:2018-07-10 09:25:42

标签: java selenium selenium-webdriver selenium-chromedriver

我想使用硒来控制Chrome浏览器。 在我的工作中,我将在地图中移动,但是当屏幕分辨率为1920 * 1080时,硒将很好地工作,而当屏幕分辨率为1366 * 768时,硒将无法工作。  代码是:

ChromeDriver driver =(ChromeDriver)webDriver;
    WebElement map =driver.findElementsByClassName("ol-unselectable").get(0); // a MAP
    Actions actions =new Actions(driver);
    System.out.println(map.getSize());
    int x =map.getSize().width;
    int y =map.getSize().height;
    actions.moveToElement(map,0,0).perform();
    actions.moveByOffset(5,5).click().perform();
    actions.moveByOffset((int)(x*0.5),0).click().perform();
    actions.sendKeys(Keys.DOWN).sendKeys(Keys.DOWN).sendKeys(Keys.DOWN).perform();
    actions.sendKeys(Keys.DOWN).sendKeys(Keys.DOWN).sendKeys(Keys.DOWN).perform();
    actions.sendKeys(Keys.DOWN).sendKeys(Keys.DOWN).sendKeys(Keys.DOWN).perform();
    actions.moveToElement(map,(int)(x*0.5),(int)(y*0.8)).click().perform();
    actions.doubleClick().perform();

代码

actions.moveToElement(map,(int)(x*0.5),(int)(y*0.8)).click().perform();" 

当我使用低分辨率时不起作用。

MAP如下所示:enter image description here 当我的屏幕分辨率为: 1920 * 1080 时,我的代码运行结果如下:enter image description here
当我将屏幕分辨率更改为 1366 * 768 时,我的代码运行结果如下:enter image description here 因此,我们发现动作无法移至地图元素{0.5宽度,0.9高}。 我该怎么办?

3 个答案:

答案 0 :(得分:2)

Actions类有时不需要几点:

  1. 您的元素应该出现在DOM上,如果不是,那么鼠标悬停将如何工作? (要克服它。根据元素的位置使用向上滚动或向下滚动)
  2. 如果您要执行多个动作,请使用build()。perform();不仅是.perform()。
  3. 有时候我们可以使用JavaScript的focus方法将元素放在元素上,然后再使用Actions类执行任何操作,如以下代码所示:

                JavascriptExecutor js = (JavascriptExecutor) ts.getDriver();
                js.executeScript("arguments[0].focus();", we);
                actions.moveToElement(map,(int)(x*0.5),(int)(y*0.8)).click().build().perform();
    

答案 1 :(得分:0)

尝试一下:

actions builder = new Actions(driver);   
builder.moveToElement(map,(int)(x*0.5),(int)(y*0.8)).click().build().perform();

也许可以解决您的问题 抱歉,我不能只在您的问题下发表评论...

答案 2 :(得分:0)

尝试一下

actions builder = new Actions(driver);   

builder.moveToElement(map,(int)(x * 0.5),(int)(y * 0.8))。click()。build()。perform();

  

请尝试一下。如果我没看错,它将解决问题。