使用JavaScript点击Selenium中的Elements
最后修改:2020年6月29日
1.介绍
在这个简短的教程中,我们将看一个简单的例子,如何点击和元素硒WebDriver使用JavaScript。
在演示中,我们将使用JUnit和硒打开https://金宝搏188体育baeldung.com并搜索“Selenium”文章。
2.依赖关系
首先,我们添加selenium-java和junit项目的依赖项pom.xml:
<依赖> < groupId > org.seleniumhq。 selenium-java 3.141.59 junit junit 4.13 test
3.配置
接下来,我们需要配置WebDriver。在这个例子中,我们将使用它的Chrome实现:
@Before public void setUp() {System.setProperty("webdriver.chrome. ");司机”,新文件(src /主/资源/ chromedriver.mac) .getAbsolutePath ());driver = new ChromeDriver();}
我们使用带注释的方法@Before在每次测试前进行初始设置。我们在里面设置webdriver.chrome.driver属性定义chrome的司机的位置。在那之后,我们实例化WebDriver对象。
当测试结束时,我们应该关闭浏览器窗口。我们可以通过放置driver.close ()注释的方法中的语句@After.这确保了即使测试失败它也会被执行:
@After public void cleanUp() {driver.close();}
4.打开浏览器
现在,我们可以创建一个测试用例这将做我们的第一步-打开网站:
@Test public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults() {driver.get("https://b金宝搏188体育aeldung.com");String title = driver.getTitle();assertEquals(“金宝搏188体育Baeldung | Java, Spring和Web开发教程”,标题);}
这里,我们用thedriver.get ()方法来加载网页。接下来,我们验证它的标题,以确保我们在正确的位置。
5.使用JavaScript点击一个元素
硒是随手可得的WebElement #点击方法调用给定元素上的单击事件。但在某些情况下,点击操作是不可能的。
一个例子是,如果我们想要单击一个禁用的元素。在这种情况下,WebElement #点击抛出一个IllegalStateException.相反,我们可以使用Selenium的JavaScript支持。
要做到这一点,我们首先需要的是JavascriptExecutor.因为我们用的是ChromeDriver实现时,我们可以简单地将它转换为我们需要的类型:
JavascriptExecutor executor = (JavascriptExecutor)驱动;
得到许可后JavascriptExecutor,我们可以用itsexecuteScript方法。参数是脚本本身和脚本参数数组。在我们的例子中,我们在第一个参数上调用click方法:
executor.executeScript(“参数[0].click(); ",元素);
现在,让我们把它放在一个单独的方法中,我们将调用clickElement:
private void clickElement(weelement element) {JavascriptExecutor executor = (JavascriptExecutor)驱动;executor.executeScript(“参数[0].click(); ",元素);}
最后,我们可以将这个添加到我们的测试中:
@Test public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults(){//…load https://金宝搏188体育baeldung.com WebElement searchButton = driver.findElement(By.className("nav——menu_item_anchor"));clickElement (searchButton);WebElement searchchinput = driver.findElement(By.id("搜索"));searchInput.sendKeys(“硒”);WebElement seeSearchResultsButton = driver.findElement(By.cssSelector(".btn-search"));clickElement (seeSearchResultsButton);}
6.不能点击的元素
在使用JavaScript单击元素时,最常见的问题之一是在可单击元素之前执行单击脚本。在这种情况下,不会发生单击操作,但代码将继续执行。
为了克服这个问题,我们必须在点击可用时才执行。我们可以使用WebDriverWait #直到等待按钮被呈现。
首先,WebDriverWait对象需要两个参数;司机和暂停:
WebDriverWait = new WebDriverWait(driver, 5000);
然后,我们调用直到,给予预期的elementToBeClickable条件:
wait.until (ExpectedConditions.elementToBeClickable (By.className(“导航——menu_item_anchor”)));
一旦它成功返回,我们就可以继续了:
WebElement searchButton = driver.findElement(By.className("nav——menu_item_anchor"));clickElement (searchButton);
有关更多可用的条件方法,请参阅官方文档.
7.结论
在本教程中,我们学习了如何使用JavaScript点击Selenium中的元素。与往常一样,本文的源代码是可用的在GitHub.