2011-11-04 33 views
3

我有一個<div name="myDiv">0</div>Selenium WebDriver getText

我試着寫一個測試myDiv有文本。使用WebDriver它是:

String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText(); 

但在結果中我有一個空字符串。我不應該使用getText()來獲取div的內容嗎?

回答

1

我找到了答案,我只需要使用真正的瀏覽器爲我webdriver的

webDriver = new FirefoxDriver(); 

然後它工作。

也許這是JavaScript問題。

+0

雖然這是事實,一個Chrome或Firefox的驅動程序將工作,你知道爲什麼HtmlUnitDriver不? – Khanetor

0

您還可以通過驗證事業部文: $ browser.is_element_present( 「// DIV [@名稱= 'myDiv']/[文本()= '0'。」)

1

聲音就像你正在使用HTMLUnitDriver,在這種情況下,你將需要啓用像下面的Java腳本的,

HtmlUnitDriver driver = new HtmlUnitDriver(); 
driver.setJavascriptEnabled(true); 

退房here

+0

是的你是對的,但它不工作,我使用Qquery fadeIn()爲tahte元素 - 但事件與setJavascriptEnabled(真),並設置一個等待(xxxx)它不起作用..所以我更喜歡使用真正的瀏覽器,而不是。 – ses

1

硒2,我用這個文件,它精美的作品對我來說。

driver.getPageSource().contains(text); 
2

我有同樣的問題;小挖把我帶到這個:

https://groups.google.com/forum/#!msg/webdriver/fRb_1QOr3wg/wzUsW3Ll6bgJ

HTMLUnitDriver(顯然FirefoxDriver)當您嘗試在它的CSS屬性「顯示」設置爲「無元素調用WebElement#的getText()將返回空字符串」。

這裏是我的解決方案:

public void assertContainsText(final By by, final String value) { 
    browser.waitTillElementPresent(by); 
     Boolean result = new WebDriverWait(getWebDriver(),Browser.DEFAULT_WAIT_TIMEOUT_SECONDS).until(new ExpectedCondition<Boolean>() { 
      @Override 
      public Boolean apply(WebDriver arg0) { 
       WebElement elem = arg0.findElement(by); 
       String text = ""; 
       if (elem.isDisplayed()) { 
        text = elem.getText(); 
       } else { 
        //have to use JavaScript because HtmlUnit will return empty string for a hidden element's text 
        text = (String) executeScript("return arguments[0].innerHTML", elem); 
        text = text.replace("<BR></BR>", "\n"); //scary 
       } 
       return text.contains(value); 
      } 
     }); 
     Assert.assertTrue(by.toString() + " contains value ["+value+"]", result); 
} 

是的,這是其醜無比。並注意text.replace(「<BR> </BR >」) - 這是因爲當您拉出原始數據時HTML標記不會被轉義。如果您在元素上調用#getText(),WebDriver將會很好地'unescape'。

我已經向我們的IT人員提出了在我們的CI服務器上安裝X-Windows的請求,以便我們可以運行FirefoxDriver。我們從HTMLUnitDriver中得到了一些麻煩,而且啓動起來非常慢。

0

試試這個

WebDriver driver = new YourBrowserdirver(); //FirefoxDriver or ChromeDriver etc.. 
String Text = driver.findElement(By.id("myDiv")).getText(); 
System.out.println("The text present in myDiv = "+Text); 
1

您可以使用gettext(),即使它沒有內容。這不應該是問題。 從你的答案看來,問題似乎是你沒有實例化FirefoxDriver。 Selenium WebDriver只會與可見元素交互,因此不可見元素的文本將始終作爲空字符串返回。

1

你可以嘗試使用jsoup庫來解析html。

首先,將頁面內容(driver.getPageSource())加載到jsoup文檔對象中,並使用該優秀庫的方法的豐富性(作者的榮譽)。

例子:

String pageSource = driver.getPageSource(); 
Document doc = Jsoup.parse(pageSource); 
Elements requestsListRecords = doc.getElementsByTag("table").get(2).getElementsByTag("tr");