2013-07-13 76 views
1

我想驗證某些文本不存在,我想通過使用正則表達式來定義該文本。 我不知道如何插入正則表達式中的代碼,但是,因爲我不知道,如果它拿起什麼林的傳球是一個正則表達式,或者它只是假定它的字符的字符串:Webdriver Java:使用正則表達式 - 如何插入它們?

  if(wait.until(ExpectedConditions.not(ExpectedConditions.textToBePresentInElement(By.tagName("body"), "[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:")))) 
      { 
       System.out.println("Pass"); 
      } 
      else 
      { 
       System.out.println("Fail"); 
      } 
+0

那麼,什麼是API說呢? – fge

+0

好吧,這整個字符串不在那裏,單獨的單詞也不在那裏,所以它什麼也沒說。但是我不知道它是將它作爲整個字符串讀取還是正在查找所有描述的字詞...... –

+0

請鏈接到javadoc。你似乎不確定的是內容是被視爲一個字符串還是一個正則表達式。 – fge

回答

3

你不幸的是不能真的這樣做。雖然Java確實支持正則表達式,但WebDriver API不支持。 WebDriver API中的每個String參數都以字面字符串形式,而不是作爲正則表達式。

您可能已經通過運行您的代碼確認了這一點。而且你沒有遺漏任何東西,你不能在搜索WebElements時使用正則表達式。如果你想知道爲什麼,原因是WebDriver主要是爲測試自動化而設計的 - 你有一個前端測試,你不想點擊所有東西?使用WebDriver!你在做別的事嗎?不知道你是否有適合的工具。

重新考慮你的方法 - 爲什麼你想通過正則表達式匹配嗎?你正在運行網站測試嗎?你不確定那裏應該展示什麼?那麼,這是錯的!你應該測試你的網站是否像預期的那樣行事。

如果您在每次加載頁面後都測試頁面是否包含一些錯誤消息,並且您確定要執行此操作,請考慮另一種方法。你可以尋找一個容器id="error-message"什麼的?你能看看網址或網頁標題是否包含404 not found或任何類似你需要斷言的內容嗎?

你可以做什麼?

  • 如果您不需要,請不要通過文本搜索。
  • 潛入XPath 1.0,看看它可以爲你做些什麼。雖然沒有正則表達式啓用函數(those could be found in XPath 2.0,但我們不能使用它),但這裏有很多優勢。例如,沒有原生lower-case()函數,可以使用translate()。或者簡單地使用多個調用。和you can use | to union node-sets在一起。有了這兩個,你可以用looooooong XPath重建你的查詢。但這是你應該做的最後一件事情之一。這不好。很壞。
  • 如果你仍然不相信你不應該搜索你正在尋找的東西,這可能是最簡單的方法。我仍然認爲它很糟糕,因爲您不知道錯誤/警告/通知是從哪裏來的,某些用戶可能會將「警告:用戶不好」作爲他的用戶名。但它確實是你的事。

    String bodyText = driver.findElement(By.tagName("body")).getText(); 
    boolean containsError = bodyText.matches("[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:"); 
    
+0

嘿,謝謝你!是的,我想驗證打開一個頁面時,沒有錯誤出現......我無法想出另一種方式。我願意接受用戶輸入的風險可能提供這些單詞之一......但是你說:「你可以尋找一個id =」錯誤信息「或什麼的容器嗎?你可以看看URL或一個頁面標題是否包含404未找到或需要聲明的任何類似內容?「也是一個很好的方法,但我將不得不做一些側處理和顯示錯誤的研究,在我實現之前 –

-1
String str1='[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:'; 

String str2=driver.findElement(By.tagname("body")); 

if(str1.equals(str2)) 

{ 
    System.out.println("Fail"); 
} 
else 
{ 
    System.out.println("Pass"); 
} 
+0

這是如何做正則表達式的任何事情?這將檢查''文本是否等於字符串「[Ee] rror:| [Ww] arning:| [Nn]注意:| [Ee] xception:」。如果你想匹配正文和正則表達式,你可以使用'str2.matches(str1)'(請參閱我的答案的最後一位)。 –