2017-04-03 10 views
2

DOMドキュメント内にテキストを含む要素を見つける関数を作成しようとしています。 PageObjectでpageobject C#seleniumで値を送信

IWebElement

[FindsBy(How = How.XPath, Using = "//*[contains(text()")] 
IWebElement getText { get; set; } 

IWebElement拡張メソッド:

public static void containsText(this IWebElement element, string value) 
{ 
    element.FindElement(By.XPath(",'" + value + "')]")); 
} 

方法:

public AutomationPage findText() 
{ 
    getText.containsText("test") 
} 

この

は私がこれを達成しようとしている方法です

それで私が達成しようとしているのは、メソッドがXpath全体を見つけなければならないということです。

正しい出力は次のようになります。

"//*[contains(text(),'test')]" 

が、それは私を与える:By.XPath:

はで要素を見つけることができませんでした// * [含まれています(テキスト()

答えて

2

これはあなたが期待しているように動作しません。基本的には、xpathが//*[contains(text()の要素を見つけようとしていて、xpathを持つ子要素を見つけようとしています,'test')]。いずれも有効なxpathではありません。ダイナミックxpathsについては

は、それがなく、FindsBy

何かこのような関数を使用することをお勧めします:、あなたのByを作成する前にしてFindElementを呼び出す前に、あなたのセレクターを構築する必要が

private IWebElement GetElementContainsText(string text) 
{ 
    return driver.FindElement(By.XPath("//*[contains(text(), '" + text + "')]; 
} 

かいつまん

このようなシナリオでは、FindsByの放棄の悲しみと、悲しみは理解できませんクール拡張メソッドを使用することができます。私は本当にあなたがそれらをしようとしている方法を行うソリューションを持っていたが、上記の私がこれらのケースで正しいアプローチであることを見てから。乾杯!

+0

こんにちは!私はもはやそれほど悲しいことはありません;)これは実際には本当にうまくいくからです。 説明とヒントをいただき、ありがとうございます。 – Dymond

関連する問題