2016-04-11 12 views
0

WebElementがあり、CSSセレクタ文字列を抽出しようとしています。Selenium WebDriver - JavaのWebElementからCSSセレクタ文字列を取得します。

: - :

[ DIV [クラス= '警告アラート危険'] [ChromeDriver:> CSSセレクタMAC上のクロム(345345345n5435345b34)] Iは、コードをデバッグするときに変数の値です。

私はCSSセレクタへのアクセス権を持っている必要があり

div[class='alert alert-danger']] 

私は、文字列を分割することができますが、誰もがセレンを提供し、より効率的な方法を知っていますか?私は.getAttribute("class")を使用して "alert alert-danger"を返そうとしましたが、セレクタ全体が必要です。

お読みいただきありがとうございました。ご協力いただければ幸いです。

答えて

0

簡単な方法の1つはregexです。あなたは、次の正規表現の式を使用することによって、全体のセレクタを抽出できて、与えられた文字列から:

div.* 

時々、あなたは(常にではないDIV)他の要素を持っているので、あなたはどのメソッドを作成することができRegex101

を参照してください。これを引数に取るので、例えば:ul.*などのために同じものを使用することができます。

+0

皆さんの提案は素晴らしかったです。ありがとうございました – Falcon25

0

いいえ、それは簡単にはできません。また、取得するセレクタには、問題の要素を一意にターゲティングする保証はありません。いくつかの洞察力のためのリンクを確認してください https://stackoverflow.com/a/19843175/6184852
要素の取得の仕方からセレクタを理解することが簡単になります。

0

独自の独自のCSSセレクタを作成して、JavaScriptを使用することができます。ここにJavaの例があります:

final String JS_BUILD_CSS_SELECTOR = 
    "for(var e=arguments[0],n=[],i=function(e,n){if(!e||!n)return 0;f" + 
    "or(var i=0,a=e.length;a>i;i++)if(-1==n.indexOf(e[i]))return 0;re" + 
    "turn 1};e&&1==e.nodeType&&'HTML'!=e.nodeName;e=e.parentNode){if(" + 
    "e.id){n.unshift('#'+e.id);break}for(var a=1,r=1,o=e.localName,l=" + 
    "e.className&&e.className.trim().split(/[\\s,]+/g),t=e.previousSi" + 
    "bling;t;t=t.previousSibling)10!=t.nodeType&&t.nodeName==e.nodeNa" + 
    "me&&(i(l,t.className)&&(l=null),r=0,++a);for(var t=e.nextSibling" + 
    ";t;t=t.nextSibling)t.nodeName==e.nodeName&&(i(l,t.className)&&(l" + 
    "=null),r=0);n.unshift(r?o:o+(l?'.'+l.join('.'):':nth-child('+a+'" + 
    ")'))}return n.join(' > ');"; 

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor js = (JavascriptExecutor)driver; 
driver.get("http://stackoverflow.com/questions"); 

// get an element 
WebElement element = driver.findElement(By.cssSelector(".youarehere")); 

// build the Css selector for the targeted element 
String selector = (String)js.executeScript(JS_BUILD_CSS_SELECTOR, element); 

// display the result 
System.out.println("Unique Css selector: " + selector); 
関連する問題