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

时间:2018-06-19 05:25:46

标签: c# selenium xpath selenium-chromedriver

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

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

但是当我运行案例时,我遇到了失败:&#34; Not In Admin Page&#34;看到错误信息。

我要做的是根据搜索条件返回一个IwebElements列表,并且在找到该元素时应该返回一个真实的响应,直到现在,我假设我想匹配&#34;真&#34;标准。我是Selenium的新人,非常感谢你对此的帮助,非常感谢。

4 个答案:

答案 0 :(得分:0)

我会研究一些事情:

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

  2. Xpath通常是find元素方法中最不可靠的,如果该选项可用,则使用ID,classname甚至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有等待元素加载的方法,我不会详细介绍,但是一个例子是here

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

<input type="checkbox" name="subject[]" value="Subject-1+Subject-2">Subject-1+Subject-2
  <input type="checkbox" name="subject[]" value="Subject-1+Subject-2+Subject-3">Subject-1+Subject-2+Subject-3
   <input type="checkbox" name="subject[]" value="Others">Others
<input type="submit" value="Submit"  name="submit" class="wpcf7-submit"><br><br>

当我更换您的

  

“如果”条件(h3.Count> 0)为(h3!= null);

我也得到了预期的结果。

“ FindElements”应返回符合搜索条件的项目列表,而我不仅不确定为什么if(h3.Count> 0)在这种情况下不起作用?