当我使用该 Xpath 在 Selenium C# 中搜索元素时,我的测试总是失败



我正在尝试检查页面上的文本,当我检查它时,我看到这个:

< div class="welcome-message">
< h1 data-bind="text: $.t('wfo.Common:wfo.Welcome'), attr: { title:    $.t('wfo.Common:wfo.Welcome') }" title="Welcome">Welcome</h1>

在我的代码中,我正在使用 Xpath 来查找元素,然后尝试验证这一点

Assert.IsTrue(AdminPage.IsAt, "Not In Admin Page");

通过实现以下代码:

public static bool IsAt { 
get{
var h3 = Driver.instance.FindElements(By.XPath("//div[@class='welcome-message']/h1[@title='Welcome']"));
if (h3.Count >0)
return true;
return false;
}
}

但是当我运行该案例时,我遇到了失败:"不在管理页面中"错误消息。

我正在尝试做的是按照搜索条件返回 IwebElements 列表,找到该元素时应返回 true 响应,到目前为止,我假设我想匹配"True"条件。 我是硒的新手,非常感谢您在这方面的帮助,非常感谢。

我会研究几件事:

  1. 尝试使用 h1 中的包含选项: //div[@class="'welcome-message']/h1[contains(@title='Welcome')

  2. Xpath 通常是查找元素方法中最不可靠的,如果选项可用,使用 ID、类名甚至 CSS 选择器会更好。显然,有时这是不可能的。 By.ClassName('welcome-message');

  3. 混合所有并过滤到孩子身上。 IWebElement parent = Driver.FindElement(By.CssSelector("div[class='welcome-message'])); IWebElement child = parent.FindElement(By.XPath(".//h1[@title='Welcome]"));

  4. 留出加载页面的时间。Selenium有等待元素加载的方法,我不会详细介绍,但这里有一个例子。

试试这个:

public static bool IsAt { 
get{
var h3 = Driver.instance.FindElements(By.CSSSELECTOR("div.welcome-message>h1[title='Welcome']"));
if (h3.Count >0)
return true;
return false;
}
}

我不确定..但我认为发生此错误是因为您的方法"IsAt"是静态的,请删除此修饰符并重试

非常感谢@cruisepandey。我用这个并经历了它:

public static bool IsAt
{ get
{
var h3 = Driver.instance.FindElements(By.XPath("//*[contains(text(), 'Welcome')]"));
if (h3!=null)
return true;
return false;
}  

当我替换你的

"如果"条件(H3.计数>0( 为 (h3 !=null(;

我也得到了预期的结果。

"FindElements"应该返回与搜索条件匹配的项目列表,我不仅不确定为什么 if (h3.计数>0( 在这种情况下不起作用?

最新更新