1

特定のテキストが存在しないことを確認し、正規表現を使用してそのテキストを定義したいと考えています。ただし、コードに正規表現を挿入する方法はわかりません。これは、渡されたものが正規表現であると認識されるのか、それとも単に文字列であると想定されるのかがわからないためです。

            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");
            }
4

2 に答える 2

3

残念ながら、これは実際にはできません。Java は正規表現を十分にサポートしていますが、WebDriver API はサポートしていません。WebDriver API のすべてのパラメーターは、正規表現としてではなくString文字列として文字どおりに解釈されます。

おそらく、コードを実行してこれを確認したことでしょう。WebElement の検索に正規表現を使用することはできません。その理由は、WebDriver が主にテストの自動化のために設計されているためです。フロントエンド テストがあり、すべてをクリックする必要はありませんか? WebDriverを使用してください!何か他のことをしていますか?適切なツールを入手したかどうかはわかりません。

アプローチを再考してください -なぜ正規表現で一致させようとしているのですか? ウェブサイトのテストを実行していますか? そこに何を表示すればよいかわかりませんか?まあ、それは間違っています!サイトが期待どおりに動作しているかどうかをテストする必要があります。

ページが読み込まれるたびにページにエラー メッセージが含まれているかどうかをテストしていて、これを実行したいことが確実である場合は、別のアプローチを検討してください。か何かの入った容器を探せますid="error-message"か?URL やページ タイトルを確認できます404 not foundか?

何ができる?

  • 必要がない場合は、テキストで検索しないようにしてください。
  • XPath 1.0に飛び込んで、何ができるか見てみましょう。正規表現を有効にする関数はありませんが (それらは XPath 2.0にありますが、使用できません)、そこには多くの強力な機能があります。たとえば、ネイティブlower-case()関数はありません。使用できますtranslate()。または、単に複数のcontains()呼び出しを使用します。また、ノードセットを結合するために使用できます|。これら 2 つを使用すると、非常に長い XPath を使用してクエリを再構築できます。しかし、これは最後にすべきことの 1 つです。これは悪いです。ひどい。
  • 探しているものを検索するべきではないという確信が持てない場合は、おそらく最も簡単な方法を次に示します。エラー/警告/通知がどこから来ているのかわからないため、まだ悪いと考えています。一部のユーザーは、ユーザー名として「警告: 悪いユーザー」を持っている可能性があります。しかし、それはあなたのことをします。

    String bodyText = driver.findElement(By.tagName("body")).getText();
    boolean containsError = bodyText.matches("[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:");
    
于 2013-07-14T08:44:20.227 に答える
-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");
}
于 2013-07-15T05:18:38.033 に答える