我已经编写了一个selenium代码来选择浏览器上的按钮并单击它但我希望selenium在移动到该元素时等待几秒钟。我该怎么做?以下是我尝试过的代码,但它确实对我不起作用。
我的代码:
Actions actionobj = new Actions(fd1);
actionobj.moveToElement(heatmap);
actionobj.perform();
fd1.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Actions action2 = new Actions(fd1);
action2.click(heatmap);
action2.perform();
我的代码工作正常,但是当鼠标移动到按钮时它停止了10秒。我也尝试过Thread.sleep(),但这也没有用。
答案 0 :(得分:4)
Java Selenium API似乎有一个方法pause(long)
。
根据文档,它需要long
表示暂停的毫秒数。
Actions actionobj = new Actions(fd1);
actionobj.moveToElement(heatmap);
actionobj.pause(10000); //wait 10 seconds
actionobj.click(heatmap);
actionobj.perform();
imlicitlyWait()
不会暂停您的代码。如果没有立即找到WebElement
,这是一种让Selenium总是等待几秒钟的方法。
请注意,pause()
已弃用。手动暂停代码是不好的做法。您应该问自己为什么认为有必要暂停代码。如果你想模拟一个等待10秒的人,那就完全没问题,如果你想要一些其他的元素或javascript来完成加载,那么你应该考虑使用不同的方法。
编辑:你的代码不会中途暂停(即使你使用Thread.sleep()
),因为在Action.perform()
执行整个序列,因为你首先构建了Actions对象,然后在执行时,你执行整个行动的整个过程。
答案 1 :(得分:2)
您也可以尝试这种方式,
Actions actionobj = new Actions(fd1);
actionobj.moveToElement(heatmap).build().perform();
Thread.sleep(10000);
actionobj.click(heatmap).build().perform();
答案 2 :(得分:1)
这是因为perform()调用是执行操作的地方。在这里,您需要先为moveToElement()创建两个操作并执行操作。然后创建单击操作并执行操作。
希望这会有所帮助。如果这不是您想要的,或者您的意思不同,请发表评论。
答案 3 :(得分:1)
尝试使用此代码突出显示并单击该元素而不是暂停该元素,这对您的问题来说不是一个可行的解决方案:
//highlighting the element on which action will be performed
public static void highlightElement(WebDriver driver, WebElement element) {
try
{
for (int i = 0; i < 3; i++)
{
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute('style', arguments[1]);",element, "color: red; border: 2px solid red;");
}
}
catch(Throwable t)
{
System.err.println("Error came : " +t.getMessage());
}
}
注意:以上代码将突出显示元素,即,将围绕&#34;红色&#34;色块。你必须通过&#34;驱动程序&#34;和&#34; webelement&#34;作为参数。
您可以直接从主类调用此方法。并且,根据您的上述代码,您可以传递这样的元素:
highlightElement(driver,heatmap);
答案 4 :(得分:-1)
如果您只想等待几秒钟,(只是为了让用户了解正在发生的事情),那么可以通过暂停java线程轻松实现。
添加强制等待的方法有很多种。
这是通过使用简单的java(与Selenium无关)
Thread.sleep(<<timeInMilliSeconds>>);
希望这适合你。