2016-07-22 113 views
2

我想學習硒,我有一個問題是等待元素,我會解釋它。硒等元素

我正在做一個Java程序,使用谷歌翻譯自動翻譯。 但由於谷歌翻譯的異步性質,沒有辦法在沒有等待的情況下獲取元素,代碼崩潰是因爲它沒有找到元素,並且元素在代碼需要時不存在,所以您必須稍等一會,直到服務器響應您的請求。

我認爲這不是一個疏遠的情況處理硒和網頁,所以我認爲必須有一個簡單的方法來做到這一點。 到目前爲止,這是我創建的用於管理情況的代碼。

public void translation(String s) { 

    System.setProperty("webdriver.chrome.driver", "C:\\Robots\\chromedriver.exe"); 

    WebElement webDriver = new ChromeDriver(); 

這是代碼我覺得應該有一個更好的方式做,

我使用的方法要等到翻譯準備

waitForElement("//*[@id='result_box']"); 


    System.out.println("prhase: " + s + " tranlsation: " + response.getText()); 

    webDriver.close(); 
} 

private void waitForElement(String element) { 
    WebElement response; 
    do { 
     try { 
      Thread.sleep(300); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     response = webDriver.findElement(By.xpath(element)); 

    } while (response.getText().isEmpty()); 
} 

燦你說我怎麼容易嗎?

+1

有一個多等待方法來等待一個元素引用這個鏈接http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp它會幫助你。 –

回答

2

你正在使用Thread.sleep而不是實際上等待元素,它只是等待3秒。

你可以這樣做,而不是。

private void waitForElement(String element) { 
WebDriverWait wait = new WebDriverWait(Driver, 10); // Wait for 10 seconds. 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(element))); 
WebElement element = driver.findElement(By.xpath(element)); 

} 

除非您期待奇怪的事情發生,否則不需要try/catch塊。上面的代碼將等待該元素出現10秒。不確定是否需要使用最後一行代碼。

希望它有幫助!

+0

It works, 謝謝 –

+1

沒問題,祝你好運! – Moser

1

而不是使用Thread.sleep()while你應該嘗試使用WebDriverWait要等到與ExpectedConditions.visibilityOfElementLocated如下的: -

private WebElement waitForElement(String element) { 
    WebDriverWait wait = new WebDriverWait(webDriver, 10); //It will wait upto 10 seconds 

    return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(element))); 
} 

現在你可以修改你的translation方法如下: -

public void translation(String s) { 

    System.setProperty("webdriver.chrome.driver", "C:\\Robots\\chromedriver.exe"); 

    WebElement webDriver = new ChromeDriver(); 
    WebElement response = waitForElement("//*[@id='result_box']"); 

    System.out.println("prhase: " + s + " tranlsation: " + response.getText()); 

    webDriver.close(); 
} 

希望它有助於.. :)

+0

它的工作原理,謝謝。我選擇了「Moser」作爲最好的答案,因爲你有更多的積分,只是爲了讓他成長:) –

+0

@DavidMarciel ok沒問題... :) –