是否可以通过 selenium webdriver 执行 OnClick javascript 函数而无需单击
Posted
技术标签:
【中文标题】是否可以通过 selenium webdriver 执行 OnClick javascript 函数而无需单击【英文标题】:Is it possible to execute the OnClick javascript function via selenium webdriver without the click 【发布时间】:2017-11-29 20:26:10 【问题描述】:我正在构建一个新的测试用例,但遇到了一个新问题,我不知道如何解决。我需要单击一个既是visiblity: hidden
又是display: none
的元素,或者至少需要一种方法来执行它调用的javascript 函数。在通过时,我已经能够使用IJavascriptExecutor
来更改元素的可见性或显示,但是这个选项对这个测试用例没有好处,因为我正在处理我在运行时使用“Driver.FindElements”定位的元素数组,所以我无法获得确切的选择器来使用我的旧方法来更改显示。
IJavaScriptExecutor js = (IJavaScriptExecutor)Driver;
var script = String.Format("document.querySelector('0').style.display='inline-block';", selector);
js.ExecuteScript(script);
附件是相关元素的 html 和 css 属性的屏幕截图。
我看到它的方式有两个选项,我可以使这个测试不是动态的,并在单个硬编码元素上执行功能(糟糕!),或者我可以弄清楚如何动态地执行此操作。所以我的希望(可能是傻瓜的希望)是我可以以某种方式调用绑定到此按钮的 onClick 事件,而无需实际单击它。
【问题讨论】:
【参考方案1】:您可以提取onclick
属性并将其作为参数发送。你也不需要使用IJavaScriptExecutor
,IWebDriver
扩展了这个接口,所以你可以调用ExecuteJavaScript方法
IWebElement buttonToClick;
string script = buttonToClick.GetAttribute("onclick");
driver.ExecuteJavaScript<object>(script);
你也可以尝试用 JavaScript 点击它
driver.ExecuteJavaScript<object>("arguments[0].click();", buttonToClick);
【讨论】:
【参考方案2】:无论可见性如何,都可以通过IJavaScriptExecutor
对IWebElement
执行JavaScript 点击。
听起来您的问题源于无法识别在运行时单击哪个元素,我会看看XPaths。
同时,下面是一个示例,说明如何使用 XPath 使用 JavaScript 单击具有 onclick
事件属性的所有 <button>
元素:
IReadOnlyCollection<IWebElement> buttons =
Driver.FindElements(By.XPath(".//button[@onclick]"));
IJavaScriptExecutor js = (IJavaScriptExecutor)Driver;
foreach (IWebElement button in buttons)
js.ExecuteScript("arguments[0].click();", button);
【讨论】:
以上是关于是否可以通过 selenium webdriver 执行 OnClick javascript 函数而无需单击的主要内容,如果未能解决你的问题,请参考以下文章
如何使用selenium Webdriver验证页面中是否存在重复文本
是否可以通过 selenium webdriver 执行 OnClick javascript 函数而无需单击
是否可以使用 Selenium WebDriver 来自动化桌面应用程序?
你的回答“用selenium webdriver来判断一个网页加载完毕”,如何用加载超时报异常来确定是否加载完毕?
是否不赞成使用Selenium中的WebDriverWait(WebDriver驱动程序,long timeoutInSeconds)?