无法在Selenium中找到元素

时间:2015-01-08 22:02:28

标签: c# selenium xpath

<div id="ColumnMask">
    <div id="MiddleColumnPositioner">
        <div id="LeftColumnPositioner">
            <div id="MiddleColumnWrapper">
                <div id="MiddleColumn">
                    <div class="bdrBottom">
                        <div class="pad">
                            <h2>Account Information</h2>
                            <br/>
                            <div class="padLeft padRight">
                            </div>
                        </div>
                        <!-- MiddleColumn -->
                    </div>
                    <!-- MiddleColumnWrapper -->

您好。我正试图找到标签,令人惊讶的是没有任何作用。以下是我的例子:

public IWebElement AccountInfoTitle() 
{ 
    return Driver.FindElement(By.XPath("//*[@id='MiddleColumn']/div[2]/h2[contains(.,'Account Information')]")); 
}

public IWebElement AccountInfoTitle() 
{ 
    return Driver.FindElement(By.XPath("//h2 [contains(.,'Account Information')]")); 
}

你知道为什么吗?它对我来说是正确的。

但如果我正在移动引号(把它们放在这样的['@ id = MiddleColumn'])它的工作完美,但我假设在这种情况下Selenium有点困惑,甚至没有验证它,因此它是通过测试。这是一个例子:

public IWebElement AccountInfoTitle() 
{ 
    return Driver.FindElement(By.XPath("//*['@id=MiddleColumn']/div['h2=Account Information']")); 
}

提前致谢。

4 个答案:

答案 0 :(得分:0)

不是完整的答案,而是其中的一部分:XPath

//*[@id='MiddleColumn']/div[2]/h2[contains(.,'Account Information')]

不会为您的输入返回任何内容,因为这是一种误解 - div[2]选择不存在div的元素的第二个直接子@id='MiddleColumn'

您输入的一个正确的XPath是

//*[@id='MiddleColumn']/div/div/h2[contains(.,'Account Information')]

为了说明 - XPath //*[@id='MiddleColumn']/div[2]/h2适用于您的输入看起来像这样(相关部分):

<div id="MiddleColumn">
  <div class="bdrBottom>Example</div>  //div[1] 
  <div class="pad">                    //div[2]                  
      <h2>Account Information</h2>

对于应该工作的第二个XPath

 //h2[contains(.,'Account Information')]

XPath表达式测试器返回了正确的结果,但我不确定h2 - //h2 [contains(.,'Account Information')]之后的空间是否会导致Selenium失败。

答案 1 :(得分:0)

您可能希望将 AccountInfoTitle 方法更改为:

public IWebElement AccountInfoTitle() 
{ 
    return Driver.FindElement(By.XPath("//h2[contains(text(),'Account Information')]")); 
}

答案 2 :(得分:0)

试试这个xpath:

<强> //div[@class='pad']/h2[.='Account Information']

以上内容会将&#39; h2&#39; 元素与&#39;帐户信息&#39; 下的精确innerHTML /文本定位在&#39; div&#39; 元素,其class属性为&#39; pad&#39;

答案 3 :(得分:0)

我认为找到元素的最佳实践包含String,如下所示:

- 使用类名或id转发所有元素 在java中我们可以使用FindElements或FindElement我不确定但我认为在c#中相同

public IWebElements getMyElement(){
return Driver.FindElements(By.cssSelector(".pad");
}

你可以使用for循环找到你的元素:

    public IWebElement getElementContainString(String expectedString){
     for(int i=0; i<getMyElement().size(); i++){
    IWebElement element = getMyElement().get(i).getText().toString();
    if(element.contain(expectedString){
    return getMyElement().get(i);
    breack;
    }

}