[英]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.