在Selenium WebDriver API中,有一个方法getLocation()
返回点,包含元素左上角的位置。比方说,它返回(x, y)
。
点(x, y)
是否与桌面(浏览器在全屏模式下)屏幕分辨率或视口(视口,浏览器窗口内网页的可见区域)分辨率相对应?
修改
根据我对这个问题的回答,我可以猜测getLocation()
返回点与各自桌面的屏幕分辨率或整个浏览器(包括工具栏,搜索栏等)而不是视口。我只是想确保如果我的想法是正确的,如果是的话,为什么getLocation()
的行为是这样的呢?是否有任何Selenium WebDriver方法,它将返回与视口相对应的元素点?
如果我错了,请纠正。
答案 0 :(得分:1)
页面上的“确切位置”,无论可见性如何。
这就是为什么在进行图像裁剪时,如果元素与整个屏幕不匹配,它会尝试在屏幕截图之外裁剪,因为实际的元素大小/位置超出了可见屏幕。
但是,如果您要查找实际页面属性并将其与基于位置的元素大小进行比较,则可以确定是否应存在滚动条。以下示例中的element
是IWebElement
和ICoordinates
的实现,因为单个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中。