html - 当浏览器由 Selenium 启动时,即使手动也无法单击链接,但是当浏览器手动启动时它可以工作
问题描述
我有一个简单的链接。我可以导航到 Selenium 中的链接并获取其文本,但是当我尝试单击时,它什么也不做。我没有从 Selenium 收到任何错误,但我确实在控制台中收到错误:
main-es2015.92d20db….js:1 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'length' of null
TypeError: Cannot read property 'length' of null
at lv.applyUpdate (main-es2015.92d20db….js:1)
at main-es2015.92d20db….js:1
at Array.forEach (<anonymous>)
at lv.init (main-es2015.92d20db….js:1)
at lv.forEach (main-es2015.92d20db….js:1)
at t._subscribe (main-es2015.92d20db….js:1)
at t._trySubscribe (main-es2015.92d20db….js:1)
at t.subscribe (main-es2015.92d20db….js:1)
at U (main-es2015.92d20db….js:1)
at H._innerSub (main-es2015.92d20db….js:1)
at b (polyfills-es2015.1ca…2e128600892efa.js:1)
at b (polyfills-es2015.1ca…2e128600892efa.js:1)
at polyfills-es2015.1ca…2e128600892efa.js:1
at l.invokeTask (polyfills-es2015.1ca…2e128600892efa.js:1)
at Object.onInvokeTask (main-es2015.92d20db….js:1)
at l.invokeTask (polyfills-es2015.1ca…2e128600892efa.js:1)
at i.runTask (polyfills-es2015.1ca…2e128600892efa.js:1)
at m (polyfills-es2015.1ca…2e128600892efa.js:1)
at u.invokeTask [as invoke] (polyfills-es2015.1ca…2e128600892efa.js:1)
at h (polyfills-es2015.1ca…2e128600892efa.js:1)
ns @ main-es2015.92d20db….js:1
handleError @ main-es2015.92d20db….js:1
奇怪的是,在这种情况下,我什至无法手动单击它。也就是说,测试导航到页面然后点击 bpt,我尝试手动单击链接并获得相同的非操作和错误。
该页面是用 Angular 构建的(我对此几乎一无所知)并使用内部库(为了保持一致的外观)。
这是我尝试单击的链接的相关 HTML:
<a _ngcontent-sop-c73="" class="text-cta col-md-5" href="#/overview/00BB042420">View Contract</a>
它在稍微不同的链接上工作得很好:
<a _ngcontent-sop-c74="" class="text-cta col-md-4" href="#/detail/00AE036060"><span _ngcontent-sop-c74="" class="mat-body-strong">00AE036060</span></a>
当然,当我手动完成所有这些操作时,它会起作用。所以我在想,Selenium 启动浏览器的方式可能存在问题,并且被这个相当简单的链接暴露出来。以下是我在从测试开始之前在浏览器中设置的选项/首选项:
Map<String, Object> preferences = new Hashtable<>();
preferences.put("profile.default_content_settings.popups", 0);
preferences.put("profile.default_content_setting_values.automatic_downloads", "true");
preferences.put("download.prompt_for_download", "false");
preferences.put("safebrowsing.enabled", "false");
// disable flash and the PDF viewer
preferences.put("plugins.plugins_disabled", new String[]{"Adobe Flash Player", "Chrome PDF Viewer"});
// prevent pw save popup:
preferences.put("credentials_enable_service", false);
preferences.put("profile.password_manager_enabled", false);
ChromeOptions cOptions = new ChromeOptions();
cOptions.setExperimentalOption("prefs", preferences);
LOGGER.debug("Preferences:\n" + cOptions.getExperimentalOption("prefs"));
cap = DesiredCapabilities.chrome();
cOptions.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cOptions.setCapability(ChromeOptions.CAPABILITY, cOptions);
cOptions.addArguments("test-type");
cOptions.addArguments("start-maximized");
cOptions.addArguments("--js-flags=--expose-gc");
cOptions.addArguments("--enable-precise-memory-info");
cOptions.addArguments("--disable-popup-blocking");
cOptions.addArguments("--disable-default-apps");
cOptions.addArguments("chrome.switches", "--disable-extensions");
cOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
cOptions.addArguments("--safebrowsing-disable-extension-blacklist");
cOptions.addArguments("--safebrowsing-disable-download-protection");
这在 Edge(版本 91.0.864.71)和 Chrome(版本 92.0.4515.131)上失败。其他浏览器还没试过。
有点用完了想法,所以如果你有任何想法,我很乐意听到它们。
解决方案
推荐阅读
- python - 近侧透视投影缺失数据轮廓图
- c++ - 为什么 QCustomPlot 在绘制大数据时速度太慢?
- python - 从 python 更新 postgres DB 中的 json 数据类型列
- powershell - ZPL/Powershell 打印问题 - M of N 文档处理
- c - 通过 C 中的库包装器自动进行函数重定向
- react-native - 修改 mapStateToProps 以实现通用访问
- apache-spark - Spark 按 Key 分组并对数据进行分区
- java - 从 JRE 7 或 8 升级到 JRE11 后,Java Swing JFrame 大小不同。如何使帧大小保持一致?
- asp.net-mvc - ASP.NET Core Razor Pages,有没有办法配置链接目录文件夹路径?
- perl - 从 tk perl 接口中的子例程传递变量