赞
踩
该笔记将记录:在 Selenium 中,如何使用代码点击按钮,以及常见问题处理。
通常点击元素使用 click() 方法即可:
// 选择元素并进行点击 webDriver.findElement(By.id("buttoncheck")).click() // 等待元素可以点击 new WebDriverWait(webDriver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("xpath-query"))).click()
或者,当找到元素后,使用 JavaScript 点击:
((JavascriptExecutor) webDriver).executeScript("arguments[0].click();", button);
该方法可以我们遇到的解决如下问题:
org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element xxxxxxxx is not clickable at point (1154, 91). Other element would receive the click: xxxxxxx
复杂的点击操作(长按、右键、双击),参考 Test Automation With Selenium Click Button Method(Examples) 页面
现实世界是复杂的,我们将在该部分中记录我们遇到的问题(与点击相关)。
# 10/03/2020 某些元素,当在浏览器窗口(viewport)中可见时,才会被绑定点击事件。因此,如果没有滚动到该元素使其可见,点击动作是无效的。在 Firefox 80.0.1 (64-bit) 中,滚动至元素可见,会发现在 Inspector 中该元素的后面后显示 event 标签。使用如下代码进行滚动及滚动完成的检查:
// 下面是与滚动至元素可见的代码的参考文献 // https://www.guru99.com/scroll-up-down-selenium-webdriver.html // https://stackoverflow.com/questions/42982950/how-to-scroll-down-the-page-till-bottomend-page-in-the-selenium-webdriver // 第一步、执行滚动 ((JavascriptExecutor) webDriver).executeScript('arguments[0].scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"});', bodyElement); // 理解 scrollIntoView 需要: // 阅读:https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView // 在我们的场景中,block: "end" 是关键设置,否则会出现“没有显示元素,而下面滚动已经提示完成”,导致事件没有绑定到元素上便触发点击事件。 // 等待滚动完成 new WebDriverWait(webDriver, 30).until(new Function<WebDriver, Boolean>() { @Override public Boolean apply(WebDriver tmpWebDriver) { String isVisibleJavascript = "return (arguments[0].getBoundingClientRect().top >= 0) && (arguments[0].getBoundingClientRect().bottom <= window.innerHeight);" Object pageReady = ((JavascriptExecutor) tmpWebDriver).executeScript(isVisibleJavascript, bodyElement); Boolean complete = pageReady.toString().equals("true"); System.out.println("检查滚动是否完成:${complete}"); // Groovy return complete; } }); // 要理解 等待滚动完成 代码,需要阅读以下文档(依序): // https://stackoverflow.com/questions/487073/how-to-check-if-element-is-visible-after-scrolling // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerHeight
Test Automation With Selenium Click Button Method(Examples)
Check if element is clickable in Selenium Java - Stack Overflow
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。