2014-11-25 101 views
0

我已經寫了一個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秒鐘時,鼠標移動到button.I也嘗試了Thread.sleep(),但也做了」工作。

+0

爲什麼你想要移動到元素,然後等待一段時間,然後點擊它,而不是移動到它並點擊它?有什麼具體原因嗎? – Subh 2014-11-25 07:19:50

+0

@Subh:我正在創建一個我創建的Web應用程序的演示。它發生得如此之快,以至於我想讓硒等待幾秒鐘,所以用戶可以理解發生了什麼。你能提出一些更好的方式來展示它嗎? – 2014-11-25 07:21:58

+0

在這種情況下,我會用突出顯示元素的代碼來幫助您,所以不必等待並單擊元素,而是突出顯示並單擊該元素。這對你有好處嗎? – Subh 2014-11-25 07:23:21

回答

2

看來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()不會暫停您的代碼。這是一種讓Selenium總是等待幾秒鐘,如果沒有立即找到WebElement的方法。

請注意,pause()已棄用。手動暫停您的代碼是不好的做法。你應該問自己爲什麼你認爲有必要暫停你的代碼。如果你想模擬一個等待10秒的人,這很好,如果你想要一些其他元素或JavaScript完成加載,那麼你應該考慮使用不同的方法。

編輯:和你的代碼犯規中途因爲Action.perform()整個序列進行,爲你打造的操作對象第一,然後執行,在執行全序列(即使你使用Thread.sleep())暫停將行動放在一起。

+0

是的,它工作的很好,我想模擬一個人,所以我會和它一起去的:) – 2014-11-25 07:29:00

+0

如果這解決了你的問題,考慮接受它作爲答案。 – stealthjong 2014-11-25 08:42:20

+0

接受的答案:) – 2014-11-25 08:46:29

1

這是因爲perform()調用是執行操作的地方。在這裏,您需要先爲moveToElement()創建兩個操作並執行操作。然後創建點擊操作並執行操作。

希望這會有所幫助。如果這不是你想要的,或者你的意思不同,請留下評論。

+0

意味着我應該做的事情如下:Actions actionobj = new Actions(fd1); \t \t \t actionobj.moveToElement(heatmap); \t actionobj.perform(); \t \t fd1.manage()。timeouts()。implicitlyWait(10,TimeUnit.SECONDS); \t \t操作action2 =新操作(fd1); \t \t action2.click(heatmap); \t action2.perform(); – 2014-11-25 07:07:05

+0

yup ..只是嘗試一次... – Pratham 2014-11-25 07:08:29

+0

它沒有工作:(更新有問題的新代碼 – 2014-11-25 07:14:25

2

您也可以嘗試這種方式,

Actions actionobj = new Actions(fd1); 
actionobj.moveToElement(heatmap).build().perform(); 
Thread.sleep(10000); 
actionobj.click(heatmap).build().perform(); 
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()); 
     } 
    } 

注意:上面的代碼將突出顯示元素,即將用「紅色」色塊環繞。您必須通過「驅動程序」和「webelement」作爲參數。

您可以直接從您的主類調用此方法。而且,按您上面的代碼,你可以通過元素是這樣的:

highlightElement(driver,heatmap);

+0

@Abhijeet:讓我知道上面的代碼是否有幫助。 :)如果您在實施時遇到問題,我們也可以將其排除。 – Subh 2014-11-25 07:41:12

-1

如果你想只需等待幾秒鐘,(只是爲了讓用戶明白髮生了什麼),那麼就可以通過暫停Java線程輕鬆實現。

添加強制等待有很多方法。

這是通過使用簡單的Java(無硒做)

Thread.sleep(<<timeInMilliSeconds>>); 

希望這對你的作品。

相關問題