Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击并按住web元素时拍摄屏幕截图_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 单击并按住web元素时拍摄屏幕截图

Java 单击并按住web元素时拍摄屏幕截图,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我有一个带有焦点皮肤的web元素,它只在单击并按住时显示。如何在发布前单击元素并按住,并捕获屏幕截图? 到目前为止,我尝试的代码是: Actions act=新操作(驱动程序); WebElement ele=driver.findElement(By.id(“btn1”); 点击并保持(ele); 法案.释放(ele); 这会截取屏幕截图,但上面的代码clickAndHold不会保留对该元素的单击。我该怎么做 您可以通过这种方式拍摄屏幕截图 File scrFile=((TakesScree

我有一个带有焦点皮肤的web元素,它只在单击并按住时显示。如何在发布前单击元素并按住,并捕获屏幕截图? 到目前为止,我尝试的代码是:

Actions act=新操作(驱动程序);
WebElement ele=driver.findElement(By.id(“btn1”);
点击并保持(ele);
法案.释放(ele);

这会截取屏幕截图,但上面的代码clickAndHold不会保留对该元素的单击。我该怎么做

您可以通过这种方式拍摄屏幕截图

File scrFile=((TakesScreenshot)驱动程序).getScreenshotAs(OutputType.File);
copyFile(scrFile,新文件(“c:\\career.jpg”);
供参考

我认为你在行动中遗漏了一些步骤:

WebElement ele = driver.findElement(By.id("btn1"));     
Actions builder = new Actions(driver);
builder.clickAndHold(ele);
// Any other actions you want to build onto this
// eg. builder.moveToElement(ele)
//        .release(ele)
//        .etc...
// Now build and get the Action
Action action = builder.build();
// Perform the action(s)
action.perform();
// Take your screenshot
// Build the release action
builder = new Actions(driver);
builder.release(ele);
// Get the built action and perform
action = builder.build();
action.perform();
这会变得复杂和烦人。你可能想考虑创建一个新的类扩展动作,添加一个你可以调用的截屏方法,然后你的代码可以简化为:

WebElement elm = driver.findElement(By.id("btn1"));
Actions builder = new Actions(driver);
builder.clickAndHold(elm).takeScreenshot().release(elm);
builder.build().perform();
我没有编译器或IDE来测试这个,但它应该可以工作

以下是最终对OP有效的方法:

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不能保存对该元素的点击。我该怎么做?当你点击并按住WebElement时,你期待什么?它有一个焦点皮肤,只在点击并按住时显示。我想我自己会试试,但想不出任何网站有这样的功能。也许这是一个愚蠢的问题,但你需要用代码截图吗?这应该是网站的一项功能,还是你只需要文档截图?我只需要文档截图在这种情况下,你为什么不使用实用程序呢?大多数都有延迟/定时器功能,允许您启动定时器,与GUI交互,并等待截图。我按照您所说的进行了尝试。扩展Actions类,添加TakeScreenshot方法,但我无法按如下顺序调用生成器;为什么您“不能按如下顺序调用”?它是否无法编译?在执行期间生成错误?如果没有编译,请确保“TakeScreenshot()”方法签名与“clickAndHold”和“release”方法匹配。即返回类型相同。还是“builder.build().perform()”行失败?请提供更多信息,说明“它不起作用”。方法“takeScreenShot()”的签名与其他操作方法匹配,这与此无关。编译得很好。“builder.build().perform()”出现问题。我尝试的另一个序列是Actions1 act=newactions1(驱动程序);((Actions1)act.clickAndHold(ele)).takeScreenshot(driver.release(ele.build().perform());这里Actions1扩展了Actions类,我在其中定义了“takeScreenshot()”方法。虽然“clickAndHold”可以执行,但它需要在焦点时刻捕获的屏幕截图却不能执行。捕获的屏幕截图在“clickAndHold()之前,我已经修改了上面的代码,它可以与单独的action方法配合使用来执行()操作方法序列。使用screenshot()调用before release()方法。@nitin chawda,如果上面的代码不正确,您能提供对您有用的内容吗?我可以更新答案以供将来参考。