簡體   English   中英

無法在硒中找到元素

[英]Unable to locate an element in Selenium

<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']")); 
}

提前致謝。

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

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

不會為您的輸入返回任何內容,因為這是一個誤解@id='MiddleColumn' div[2]選擇不帶@id='MiddleColumn'的元素的第二個直接子div

您輸入的一個正確的XPath是

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

例如//*[@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失敗。

您可能需要將AccountInfoTitle方法更改為:

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

試試這個xpath:

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

上面的代碼將在類屬性為'pad''div'元素下找到具有確切innerHTML / text作為'Account Information''h2'元素。

我認為定位元素的最佳做法包含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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM