本地机器:戴尔纬度(i7-8650Ucpu@1.90GHz2.11 GHz),内存16.0GB
操作系统: Windows 10 Pro (64位) v1909
显示比例和布局: 100%
在Visual 2017上运行(v15.9.21)
.NET框架(v4.8.03752)
jsakamoto的Selenium NuGet package Selenium.WebDriver.IEDriver (v3.150.1)
Internet 11,(v11.836.18362.0),放大倍数为100%
InternetExplorerOptions options = new InternetExplorerOptions();
options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
options.RequireWindowFocus = true;
options.AddAdditionalCapability("disable-popup-blocking", true);
options.EnablePersistentHover = true;
options.EnsureCleanSession = true;
options.EnableNativeEvents = false;
options.UnhandledPromptBehavior = UnhandledPromptBehavior.Accept;
options.ElementScrollBehavior = InternetExplorerElementScrollBehavior.Top;
options.IgnoreZoomLevel = true;
options.EnsureCleanSession = true;
options.AddAdditionalCapability("IE_ENSURE_CLEAN_SESSION", true);
options.AddAdditionalCapability("JAVASCRIPT_ENABLED", true);经典ASP页面
元素是type=“按钮”的输入元素。
我使用工厂实例化元素,元素变量名为"btnsearch“,然后执行以下代码,这些方法都不会触发Click事件。每种方法似乎都会单击元素,但元素似乎不会通过Selenium触发click事件。如果我实际单击按钮,它会触发click事件。
<code>
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("javascript:window.scrollBy(1119,3)"); // this is the coordinates of the element once scrolled into view
IJavaScriptExecutor clicker = (IJavaScriptExecutor)driver;
clicker.ExecuteScript("arguments[0].click();", btnsearch);
driver.ExecuteJavaScript<object>("arguments[0].click();", btnsearch);
Actions act = new Actions(driver);
act.MoveToElement(btnsearch).SendKeys(Keys.Enter).Build().Perform();
btnsearch.Click();
</code>我甚至尝试添加一个事件侦听器来发送keyup事件(输入键),Selenium抛出一个异常"Object不支持属性或方法'addEventListener'“
救命!我已经广泛地搜索了一种方法来实现这一点,并且尝试了IE选项的多种变体(on和off)以及不同的编码方法。不幸的是,开发这个遗留应用程序的开发人员不太可能进行任何实质性的更新,直到这个应用程序被太阳化。我还能做些什么呢?我甚至会采取一个复杂的解决办法,以使我的自动化工作,直到日落真正发生。
发布于 2020-05-29 14:56:05
由于您使用的是JSE,所以不需要滚动到元素(JS可以与ViewPort中不存在的元素交互)。您只需使用JSE单击搜索按钮即可。
// declare JSE
// run JS to click the `button`
// (important) wait for the new page/element before proceeding或者您也可以使用JSE运行Element.scrollTo(),然后执行正常的Selenium操作(我更喜欢这一点,因为Selenium的命令中有帮助程序,比如单击等待页面加载,而不是JSE .click)。
// declare JSE
// run JSE to scrollTo
// webDriver.click(myElement)https://sqa.stackexchange.com/questions/44654
复制相似问题