页面包含一个输入框,带有一个带有“+”的侧按钮。我可以清除输入框,向其中发送一些文本,然后当我可以获得“+”按钮的网络元素引用时,但是看在上帝的份上,我无法使用下面的任何方式单击它‘Selenium v4.0’,就像普通的 Web 元素 click(),或 Actions 类 或 甚至 JavaScriptExecutor。另外值得注意的是我使用流畅等待100秒。请参阅下面我使用的代码花絮和屏幕图片。
1. waitingDriver = new WebDriverWait(driver,Duration.ofSeconds(100));
WebElement someBtn=waitingDriver.until((ExpectedConditions.elementToBeClickable(by)));
someBtn.click();// would not able to click
System.out.println("btnClickBy, Text="+someBtn.getText());// returns text as '+'
2. JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", someBtn);// would not able to click
3. Actions actions = new Actions(driver);
actions.moveToElement(someBtn).click().perform();// would not able to click
在发帖后,我观察到在大多数情况下,运行时无法仅执行输入框旁边的一个按钮单击。我可以检索按钮上的文本,但无法单击它。
所以,在用多种方式编写 Selenium 定位器之后,我终于使用了 JavaScript 执行器接口,它确实有效!因此,一旦跨过该障碍,剩下的就是以带有条件 ExpectedConditions 子句的流畅等待的形式保留更多的等待时间。所有元素都可以轻松访问,甚至没有问题。
学到的教训:当您测试由基于javaScript的库组成的网站时,请尝试使用ExpectedConditions进行条件流畅等待,最后不要忘记为您的点击操作使用JavaScript执行器接口。