Selenium'moveByOffset'只能工作2次

时间:2014-12-07 12:17:33

标签: java selenium selenium-webdriver

我目前正在阅读一本书来学习硒,我无法获得一些正确运行的代码示例。 下面的代码应该点击3个瓷砖,但它只点击前2个。 。 。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.*;

public class MoveByOffSetAndClick {
    public static void main(String... args){
        WebDriver driver = new FirefoxDriver();
        driver.get("file:///C:/Selectable.html");
        WebElement one = driver.findElement(By.name("one"));
        WebElement eleven = driver.findElement(By.name("eleven"));
        WebElement six = driver.findElement(By.name("six"));

        int borderWidth = 1;        
        Actions builder = new Actions(driver);

        builder.moveByOffset(one.getLocation().getX() + borderWidth, 
                one.getLocation().getY() + borderWidth).click();
        builder.build().perform();

        builder.moveByOffset(six.getLocation().getX() + borderWidth, 
                six.getLocation().getY() + borderWidth).click();    
        builder.build().perform();

        builder.moveByOffset(eleven.getLocation().getX() + borderWidth, 
                eleven.getLocation().getY() + borderWidth).click();
        builder.build().perform();

        driver.quit();

    }
}

任何人都知道为什么会发生这种情况?

操作系统:Windows 7 Professional 64位 Java:7u71 x64 Eclipse:Luna Service Release 1(4.4.1)64位

这是HTML正在制作的......

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>jQuery UI Selectable - Display as grid</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css" />
<style>
#feedback { font-size: 1.4em; }
#selectable .ui-selecting { background: #FECA40; }
#selectable .ui-selected { background: #F39814; color: white; }
#selectable { list-style-type: none; margin: 0; padding: 0; width: 450px; }
#selectable li { float: left; width: 100px; height: 80px; font-size: 4em; text-align: center; }
</style>
<script>
$(function() {
$( "#selectable" ).selectable();
});
</script>
</head>
<body>
<ol id="selectable">
<li class="ui-state-default" name="one">1</li>
<li class="ui-state-default" name="two">2</li>
<li class="ui-state-default" name="three">3</li>
<li class="ui-state-default" name="four">4</li>
<li class="ui-state-default" name="five">5</li>
<li class="ui-state-default" name="six">6</li>
<li class="ui-state-default" name="seven">7</li>
<li class="ui-state-default" name="eight">8</li>
<li class="ui-state-default" name="nine">9</li>
<li class="ui-state-default" name="ten">10</li>
<li class="ui-state-default" name="eleven">11</li>
<li class="ui-state-default" name="twelve">12</li>
</ol>
</body>
</html>

2 个答案:

答案 0 :(得分:2)

您使用的方法无法按照您打算使用它的方式运行。 documentation for moveByOffset说:

  

将鼠标从当前位置(或0,0)移动给定的偏移量

也就是说,它将鼠标移动相对于当前鼠标位置的偏移量 。在您的代码中,您使用相对于文档的坐标来调用它。它是第一次工作,因为如果尚未建立鼠标位置,则初始鼠标坐标为0, 0。它也是第二次工作,因为当你进行第二次调用时,鼠标位于你的第一个列表项中,因此仍然接近0, 0。单击时,鼠标单击不会发生在表示的位置,但仍然six内,因此 >使你的代码遗失six。但是,到第三次呼叫时,呼叫前的鼠标坐标在six。这样,第三次调用moveByOffset会将鼠标移到eleven之外。

这是真正的错误或没有错误。

通常,单击内部元素时无需担心边框。 click()方法会自动将鼠标移动到您关注的元素的中心点,因此通常无需您自己调整鼠标位置。在特殊情况下,您可能需要担心抵消,但是您没有表现出需要担心的情​​况。

答案 1 :(得分:0)

Yah Subh,

是的 - 我使用以下代码来解决它。非常感谢您的投入!

WebDriver driver = new FirefoxDriver();
driver.get("file:///C:/Selectable.html");
WebElement one = driver.findElement(By.name("one"));
WebElement eleven = driver.findElement(By.name("eleven"));
WebElement six = driver.findElement(By.name("six"));

Actions builder = new Actions(driver);

builder.click(one).click(six).click(eleven);
builder.build().perform();