无法获取文本表单元素

时间:2017-11-13 13:22:24

标签: c# selenium xpath selenium-webdriver automated-tests

我无法从Selenium中的元素中获取文本。我尝试使用以下代码但什么都没得到。 Xpath助手只显示一个这样的元素。

我使用的代码:

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.WaitUntilElementIsAppear,就会正确找到文本。 所以事情是你无法帮助我,因为你没有看到完整的代码。对不起,我的错误,我太绿了。下次我将提供完整的代码或git rep的链接。我非常乐意帮助你们所有人。

1 个答案:

答案 0 :(得分:0)

Viktor - 这就是我的样子......

    [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;
        }
    }