无法在硒中截取鼠标悬停的屏幕截图
unable to take screenshot of mouseover in selenium
我正在尝试使用 TakesScreenshot
截取在 selenium 中悬停时发生的子菜单。但这是行不通的。已截取屏幕截图,但图像中不存在子菜单。
我也尝试过在悬停后使用隐式等待,但没有任何效果。
请建议一种截取子菜单屏幕截图的方法。
contactUs.hoverHM();
screenshot = ((TakesScreenshot) PageFactoryBase.getSharedWebDriver()).getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png");
下面是另一种方法,您可以使用“打印屏幕”键入您的测试代码并从系统的剪贴板中获取图像。
所做的是使用 KeyEvent 'PRTSC' 将图像放入系统剪贴板,然后让系统剪贴板将其写入文件。我希望它也能复制鼠标悬停。
Robot rob = new Robot();
rob.keyPress(KeyEvent.VK_PRINTSCREEN);
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable content = clip.getContents(null);
BufferedImage img = (BufferedImage)content.getTransferData(DataFlavor.imageFlavor);
ImageIO.write(img, "png", new File("D:\test.png"));
我尝试过相同的场景,但 clickAndHold
悬停皮肤。它在 Actions
的帮助下对我有用,如下所示:
WebElement elm = driver.findElement(By.id("btn1"));
Actions builder = new Actions(driver);
Action act = builder.clickAndHold(elm).build();
act.perform();
try {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\Img\screenshot.png"));
} catch (IOException e) {
e.printStackTrace();
}
act = builder.release(elm).build();
act.perform();
您可以将 clickAndHold
替换为 moveToElement
鼠标悬停在元素上。截取屏幕截图然后释放元素或离开它。
这对我有用。我很确定它对你有用。
_driver = new FirefoxDriver();
_driver.Navigate().GoToUrl("http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mouseover_mouseout");
_driver.SwitchTo().Frame(_driver.FindElement(By.Id("iframeResult")));
Actions builder = new Actions(_driver);
builder.MoveToElement(_driver.FindElement(By.TagName("p"))).Build().Perform();
var screenshot = ((ITakesScreenshot)_driver).GetScreenshot();
var filename = new StringBuilder("D:\");
filename.Append(DateTime.Now.ToString("HH_mm_ss dd-MM-yyyy" + " "));
filename.Append("test");
filename.Append(".png");
screenshot.SaveAsFile(filename.ToString(), System.Drawing.Imaging.ImageFormat.Png);
将鼠标悬停在文字上后,它变成黄色,下面是我截取的屏幕截图。
感谢大家对此话题的回答。
我可以按照 Vivek 的建议使用机器人截屏。
builder.moveToElement(getSharedWebDriver().findElement(By.xpath("//div[@class='brand section']/ul/li [@class='active hasflyout']")).perform();
机器人robot = new Robot();
点点;
point = getSharedWebDriver().findElement(By.xpath("//div[@class='brand section']/ul/li[@class='active hasflyout']")).getLocation();
int x = point.getX();
int y = point.getY();
robot.mouseMove(x,y);
在理想情况下,应该使用 perform() 或 mouseMove()。但不知何故,就我而言,我不得不同时使用这两个功能。
我正在尝试使用 TakesScreenshot
截取在 selenium 中悬停时发生的子菜单。但这是行不通的。已截取屏幕截图,但图像中不存在子菜单。
我也尝试过在悬停后使用隐式等待,但没有任何效果。
请建议一种截取子菜单屏幕截图的方法。
contactUs.hoverHM();
screenshot = ((TakesScreenshot) PageFactoryBase.getSharedWebDriver()).getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png");
下面是另一种方法,您可以使用“打印屏幕”键入您的测试代码并从系统的剪贴板中获取图像。 所做的是使用 KeyEvent 'PRTSC' 将图像放入系统剪贴板,然后让系统剪贴板将其写入文件。我希望它也能复制鼠标悬停。
Robot rob = new Robot();
rob.keyPress(KeyEvent.VK_PRINTSCREEN);
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable content = clip.getContents(null);
BufferedImage img = (BufferedImage)content.getTransferData(DataFlavor.imageFlavor);
ImageIO.write(img, "png", new File("D:\test.png"));
我尝试过相同的场景,但 clickAndHold
悬停皮肤。它在 Actions
的帮助下对我有用,如下所示:
WebElement elm = driver.findElement(By.id("btn1"));
Actions builder = new Actions(driver);
Action act = builder.clickAndHold(elm).build();
act.perform();
try {
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\Img\screenshot.png"));
} catch (IOException e) {
e.printStackTrace();
}
act = builder.release(elm).build();
act.perform();
您可以将 clickAndHold
替换为 moveToElement
鼠标悬停在元素上。截取屏幕截图然后释放元素或离开它。
这对我有用。我很确定它对你有用。
_driver = new FirefoxDriver();
_driver.Navigate().GoToUrl("http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mouseover_mouseout");
_driver.SwitchTo().Frame(_driver.FindElement(By.Id("iframeResult")));
Actions builder = new Actions(_driver);
builder.MoveToElement(_driver.FindElement(By.TagName("p"))).Build().Perform();
var screenshot = ((ITakesScreenshot)_driver).GetScreenshot();
var filename = new StringBuilder("D:\");
filename.Append(DateTime.Now.ToString("HH_mm_ss dd-MM-yyyy" + " "));
filename.Append("test");
filename.Append(".png");
screenshot.SaveAsFile(filename.ToString(), System.Drawing.Imaging.ImageFormat.Png);
将鼠标悬停在文字上后,它变成黄色,下面是我截取的屏幕截图。
感谢大家对此话题的回答。 我可以按照 Vivek 的建议使用机器人截屏。
builder.moveToElement(getSharedWebDriver().findElement(By.xpath("//div[@class='brand section']/ul/li [@class='active hasflyout']")).perform(); 机器人robot = new Robot();
点点;
point = getSharedWebDriver().findElement(By.xpath("//div[@class='brand section']/ul/li[@class='active hasflyout']")).getLocation(); int x = point.getX(); int y = point.getY(); robot.mouseMove(x,y);
在理想情况下,应该使用 perform() 或 mouseMove()。但不知何故,就我而言,我不得不同时使用这两个功能。