了解getLocation()Selenium WebDriver API的返回值

时间:2014-07-21 10:21:28

标签: selenium selenium-webdriver

在Selenium WebDriver API中,有一个方法getLocation()返回点,包含元素左上角的位置。比方说,它返回(x, y)

(x, y)是否与桌面(浏览器在全屏模式下)屏幕分辨率或视口(视口,浏览器窗口内网页的可见区域)分辨率相对应?

修改

根据我对这个问题的回答,我可以猜测getLocation()返回点与各自桌面的屏幕分辨率或整个浏览器(包括工具栏,搜索栏等)而不是视口。我只是想确保如果我的想法是正确的,如果是的话,为什么getLocation()的行为是这样的呢?是否有任何Selenium WebDriver方法,它将返回与视口相对应的元素点?

如果我错了,请纠正。

3 个答案:

答案 0 :(得分:1)

页面上的“确切位置”,无论可见性如何。

这就是为什么在进行图像裁剪时,如果元素与整个屏幕不匹配,它会尝试在屏幕截图之外裁剪,因为实际的元素大小/位置超出了可见屏幕。

但是,如果您要查找实际页面属性并将其与基于位置的元素大小进行比较,则可以确定是否应存在滚动条。以下示例中的elementIWebElementICoordinates的实现,因为单个IWebElement不会为您提供下面使用的ICoordinates接口。

    Point p = element.LocationOnScreenOnceScrolledIntoView;
    OpenQA.Selenium.Interactions.Internal.ICoordinates p2 = element.Coordinates;

以上两者在捕捉位置方面略有不同。 LocationOnScreenOnceScrolledIntoView包括滚动到元素,然后根据屏幕的左上角返回位置。

坐标以各种方式提供具体位置,并包含LocationInViewport属性,该属性将提供您所信仰的内容。

    p = p2.LocationInViewport;
    p = p2.LocationOnScreen;
    p = p2.LocationInDom;
    object obj = p2.AuxiliaryLocator;

答案 1 :(得分:0)

根据我的理解,它会返回具有相应桌面屏幕分辨率或整个浏览器(包括工具栏,搜索栏等)的点,而不是视点。

这是我尝试过的。在下面的代码中,我得到了源元素的位置(它是元素左上角的点(x,y))并将鼠标移动到该点。如果你看到,鼠标指针没有移动到元素的点,而是移动到元素的上方。这让我猜测getLocation()会返回与桌面屏幕分辨率相对应的元素点。 请在

之前和之后仔细观察鼠标指针
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;

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.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class DragAndDropUsingRobot {
    WebDriver driver = null;

    @BeforeClass
    public void setUp(){
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("http://www.w3schools.com/html/html5_draganddrop.asp");
    }

    @AfterClass
    public void tearDown(){
        driver.quit();
    }

    @Test
    public void testDragAndDrop() throws AWTException, InterruptedException{
        WebElement source = driver.findElement(By.id("div1")); 

        Robot robot = new Robot();
        Thread.sleep(2000);
        robot.mouseMove(source.getLocation().getX(), source.getLocation().getY());

        Thread.sleep(5000);
    }
}

答案 2 :(得分:0)

位置(在python中)是指当前renderable canvas中元素区域的左上角的位置。如果您将元素的高度和宽度添加到该元素,则会得到元素的右下角。

此外,我认为该值缩放 - 至少在Chrome的情况下,因为它可以包含浮动值,例如:

'location': {'y': 6825, 'x': 519.5}, 'size': {'width': 476, 'height': 16}

它不能是桌面位置,因为它可以返回大于桌面分辨率的值。如果您希望拥有桌面位置,location_once_scrolled_into_view可能至少非常接近,但我还没有使用它:它告诉我们

  

屏幕上的元素是这样我们可以点击它。这种方法   应该导致元素滚动到视图中。

至少在python中,它是一个元素属性而不是方法,并且不会将元素滚动到视图AFAIK中。