使用Selenium + Java选择网页上的所有复选框

时间:2016-10-25 03:22:05

标签: java selenium web selenium-webdriver

所以基本上我的程序登录到一个页面,检查所有框并单击另一个按钮以对其执行操作。

所以我登录,导航到我的网页,但是我试图使用Java + Selenium点击这段代码中的所有相关网页,并且它没有做任何事情:

java.util.List<WebElement> els =
    driver.findElements(By.xpath("//input[@type='checkbox']"));
for (WebElement el : els) {
  if (!el.isSelected()) {
    el.click();
  }
}

检查复选框的元素时的HTML代码如下所示:

<div class="actions-column table-cell">
    <input data-ng-model="item.isChecked" data-ng-show="item.canEdit ||item.canPromote || item.displayBumpUpCTA" class="check-ad ng-valid ng-dirty" value="1200304741" data-ng-change="selectItem(item)" type="checkbox">

我尝试使用CSS Selector以及上面的代码但似乎没有选择所有框:( :(

我可以发布问题的截图/视频等,但回顾一下,当我运行代码时,根本没有检查复选框

我也在控制台中找回了这个错误:

Exception in thread "main" org.openqa.selenium.InvalidArgumentException: unknown error: Element is not clickable at point (205, 616). Other element would receive the click: <div class="controls table-row">...</div>

Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, chrome={userDataDir=C:\Users\user\AppData\Local\Temp\scoped_dir6992_17191}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=53.0.2785.143, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]

Session ID: [insert numbers here]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:164)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:636)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:284)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
at test.CodeAutomate.main(CodeAutomate.java:39)

2 个答案:

答案 0 :(得分:1)

$scope.dropdown1 = $stateParams.dropdown1 || null; $scope.dropdown2 = $stateParams.dropdown2 || null; $scope.dropdown3 = $stateParams.dropdown3 || null; 会返回一些内容。但你的病情尚不清楚。请将其更改为!el.isSelected()并试一试。

答案 1 :(得分:0)

我最终解决了这个问题

基本上,代码必须导航到每个复选框的位置,然后单击它

代码看起来像这样:

java.util.List<WebElement> els =
    driver.findElements(By.xpath("//input[@type='checkbox']"));

JavascriptExecutor jse = (JavascriptExecutor) driver;

for (WebElement el : els) {
  jse.executeScript("arguments[0].click()", el);
}