【发布时间】:2021-11-19 10:27:10
【问题描述】:
使用 Selenium,我正在填写一个表单,单击一个按钮将我带到同一选项卡上的一个新页面,然后我希望能够单击新页面中的一个按钮。 但是我得到了
没有这样的元素:无法找到元素:{"method":"css 选择器","选择器":"*[id="widget_5052246"]"}
我发现它并没有等待我的页面完全加载,然后再尝试单击下一步按钮。 于是我环顾四周,发现this。 添加了
driver.wait(function() {
return driver.executeScript('return document.readyState').then(function(readyState) {
return readyState === 'complete';
});
});
但是,它没有用......
发现我可以做到
await driver.wait(until.elementLocated(By.id("widget_5052246")), 20000)
然后点击元素后。
但我得到了
Error: Timeout of 30000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
是的,我不确定如何等待页面正确加载...
按钮的HTML代码:
<button id="widget_5052246" class="adbx-widget btn btn-default" data-action="play" ng-style="vm.style" ng-click="vm.click($event);" ng-mouseover="vm.onMouseOver()" ng-mouseleave="vm.onMouseLeave()" ng-mousedown="vm.onMouseDown()" ng-mouseup="vm.onMouseUp()" ng-touchstart="vm.onTouchStart()" ng-touchend="vm.onTouchEnd()" ng-hide="vm.hide" identifier="5052246" aria-hidden="false" style="visibility: visible; width: auto; height: auto; left: 260px; top: 253px; z-index: 1; transform: rotate(0deg); cursor: pointer; outline: none;"><!-- ngIf: vm.styleClass === '' --> <!-- ngIf: vm.styleClass !== '' --><span ng-if="vm.styleClass !== ''" disabled="disabled" style="opacity: 1; cursor: pointer" translate="Cliquez pour découvrir si vous avez gagné" class="ng-scope ng-binding">Cliquez pour découvrir si vous avez gagné</span><!-- end ngIf: vm.styleClass !== '' --></button>
发现问题不在于加载时间没有发生,而是点击没有通过。该点击通常会打开一个新页面,但它永远不会进入下一页。
编辑:添加按钮代码
【问题讨论】:
-
这个id
widget_5052246好像不是静态的,可以分享一下这个按钮的HTML代码吗? -
你不应该等待
readyState === 'complete'。默认开启。 -
@cruisepandey 我添加了按钮的代码。
-
@Joel :我不理解不接受,这张票仅用于定位器和点击问题,我们解决了它,请参阅下面的 cmets,之后您无法执行点击的地方,如果您要求有变化,请尝试提交新工单。
标签: javascript selenium selenium-webdriver