我无法从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. Check the code you have entered and 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的链接。我非常乐意帮助你们所有人。
答案 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;
}
}