2017-11-13 12 views
-1

Seleniumの要素からテキストを取得できません。私は次のコードを使用しようとするが、何も得られない。 Xpathヘルパーはそのような要素を1つしか表示しません。テキストフォーム要素を取得できません

コード私が使用します。

protected const string ERROR_FORM = "//p[contains(@data-bind, 'invalid')]"; 

[FindsBy(How = How.XPath, Using = ERROR_FORM)] 
protected IWebElement ErrorForm { get; set; } 

public string GetErrorText() {return ErrorForm.Text;} 

HTMLコード:

<p class="g-textfield__error" data-bind="if: tokenError() === 'invalid'">Invalid 
code.&nbsp;Check the code&nbsp;you have entered and&nbsp;try again.</p> 
<p class="g-textfield__error" data-bind="if: tokenError() === 'expired'"></p> 

問題は、以前のコードで発見されました。コードは次のとおりです。

public string GetErrorText() 
    { 
     CustomTestContext.WriteLine("Получить сообщение об ошибке."); 

     if (!IsInvalidCodeErrorMessageAppeared()) 
     { 
      throw new XPathLookupException("Произошла ошибка:\n не появилось сообщение об ошибке."); 
     } 

     return ErrorForm.Text; 
    } 


    public bool IsInvalidCodeErrorMessageAppeared() 
    { 
     CustomTestContext.WriteLine("Проверяем появилось ли сообщение об ошибке"); 
     return Driver.WaitUntilElementIsAppear(By.XPath(ERROR_FORM)); 
    } 

表示する前に要素をチェックしたようです。 Driver.WaitUntilElementIsDisplayのDriver.WaitUntilElementIsAppearearを変更すると、テキストが正しく検出されました。 それは、あなたが完全なコードを見なかったので、あなたが私を助けなかったことです。申し訳ありませんが、私の間違い、私はあまりにも緑色です。次回は完全なコードやgit repへのリンクを提供します。私はあなたを助けようと努力してくれて大変です。

+0

あなたはあなたのコードPageFactory.InitElements'in '呼び出していますか?次のようなものがあります: 'PageFactory.InitElements(webDriver、this);' これは 'FindsBy'属性を使うときには不可欠です。 – Marcel

+0

はい、PageFactoryが使われています。 FindsByが初期化されます。これは問題ではありません。 –

+0

もっとコードを提供できますか?あなたのコードのどの時点で 'GetErrorText();'を呼びますか?あなたのXPathは、提供されたhtmlの – Marcel

答えて

0

ヴィクトル - ここでは鉱山がどのようになるかである....

[FindsBy(How = How.XPath, Using = "//p[contains(@data-bind, 'invalid')]")] 
    private readonly IWebElement _errorMsgAlert = null; 

    public string GetAlertError() 
    { 
     string errmsg= MyFunctions.GetElementText(_errorMsgAlert); 
     return errmsg; 
    } 

    public static string GetElementText(IWebElement element) 
    { 
     var text = ""; 
     while (true) 
     { 
      try { text = element.Text; } 
      catch (StaleElementReferenceException) { } 
      return text; 
     } 
    } 
関連する問題