2017-06-26 9 views
2

新しいテストケースを構築しており、新しい問題が発生しました。 visiblity: hiddendisplay: noneのいずれかの要素をクリックするか、少なくとも呼び出すjavascript関数を実行する方法が必要です。渡された要素の可視性や表示を変更するのにIJavascriptExecutorを使用することができましたが、このオプションは、 `Driver.FindElements 'を使用して実行時に配置される配列の配列を扱っているので、表示を変更するために私の古い方法を使用するために正確なセレクタを取得します。クリックなしでselenium webdriverを使ってOnClick javascript関数を実行することは可能ですか?

IJavaScriptExecutor js = (IJavaScriptExecutor)Driver; 
var script = String.Format("document.querySelector('{0}').style.display='inline-block';", selector); 
js.ExecuteScript(script); 

添付されているのは、該当する要素のhtml属性とcss属性のスクリーンショットです。

私はこのテストを動的ではなく、ハードコーディングされた単一の要素(yuck!)で機能させることができる2つの選択肢があるか、またはこれを動的に行う方法を理解することができます。だから、私の希望(おそらく愚かな希望)は、私は何とか実際にクリックすることなくこのボタンにバインドされたonClickイベントを呼び出すことができるということです。 enter image description here

答えて

1

を。また、あなたはちょうどあなたがまた、JavaScriptの

driver.ExecuteJavaScript<object>("arguments[0].click();", buttonToClick); 
でそれをクリックしてみてくださいすることができます

IWebElement buttonToClick; 
string script = buttonToClick.GetAttribute("onclick"); 
driver.ExecuteJavaScript<object>(script); 

ExecuteJavaScriptメソッドを呼び出すことができるようIWebDriverはこのインタフェースを拡張し、IJavaScriptExecutorを使用する必要はありません

0

可視性に関係なく、を経由してIWebElementをクリックすると、JavaScriptのクリックをIJavaScriptExecutor経由で実行できます。

実行時にクリックする要素を特定できないという問題が発生した場合は、XPathsをご覧ください。一方


、ここではJavaScriptにXPathを使用してonclickイベント属性を持つすべての<button>要素、クリックする方法の例です:あなたはonclick属性を抽出し、それをパラメータとして送ることができ

IReadOnlyCollection<IWebElement> buttons = 
    Driver.FindElements(By.XPath(".//button[@onclick]")); 
IJavaScriptExecutor js = (IJavaScriptExecutor)Driver; 
foreach (IWebElement button in buttons) 
{ 
    js.ExecuteScript("arguments[0].click();", button); 
} 
関連する問題