2017-06-26 124 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!),或者我可以弄清楚如何動態地執行此操作。所以我的希望(可能是一個傻瓜的希望)是,我可以以某種方式調用綁定到此按鈕的onClick事件,而不用實際點擊它。 enter image description here

回答

1

你可以提取onclick屬性並將其作爲參數。你也不需要使用IJavaScriptExecutorIWebDriver擴展了此接口,所以你可以叫ExecuteJavaScript方法

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

您也可以嘗試用JavaScript

driver.ExecuteJavaScript<object>("arguments[0].click();", buttonToClick); 
點擊它
0

可以通過IJavaScriptExecutor執行JavaScript點擊IWebElement,而不管可見性如何。

聽起來像你的問題源於無法識別在運行時點擊哪個元素,我會看看XPaths


在此期間,這裏有一個如何的JavaScript單擊所有<button>元素與onclick事件屬性,使用XPath的例子:

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