【问题标题】:Issue selecting all the checkboxes on a webpage using Selenium + Java使用 Selenium + Java 选择网页上的所有复选框时出现问题
【发布时间】:2016-10-25 03:22:05
【问题描述】:

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

所以我登录,导航到我的网页,但我尝试使用 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 选择器,但似乎没有选择所有框 :( :(

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

我也在控制台中返回此错误:

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)

【问题讨论】:

  • 先验证el.isSelected()返回真假??
  • 您发布的堆栈跟踪缺少实际异常。
  • 嗨,我很抱歉,我应该把它放在描述中,当我尝试运行我的代码时,我在控制台中输出了一个语法错误。我尝试检查它是否返回 true 或 false,但没有任何内容打印到错误 @SaurabhGaur 的控制台 b/c
  • @Guy 对不起,我意识到我没有复制上面的部分。所以首先在控制台上打印 False, False,然后是这个异常:线程“main”中的异常 org.openqa.selenium.InvalidArgumentException: unknown error: Element is not clickable at point (205, 616)。其他元素会收到点击:
    ...
  • @Guy 所以基本上它看起来像是在尝试点击一些不可点击的点,这就是程序中断的地方

标签: java selenium web selenium-webdriver


【解决方案1】:

!el.isSelected() 返回一些东西。但是你的情况不清楚。请将其更改为el.isSelected()==false 并尝试一下。

【讨论】:

  • 如果el.isSelected() 没有返回任何内容,el.isSelected()==false 将如何工作?
  • 对不起,这个答案仍然没有任何意义。 !el.isSelected()el.isSelected()==false 是一回事。
  • 如果 el.isSelected 返回 false,!el.isSelected 将为 true,如果 el.isSelected 返回 true,!el.isSelected 将为 false。那么java编译器将如何验证这些条件以跳转到循环中。
  • 如果表达式!el.isSelected() 为真,那么表达式el.isSelected()==false 也为真。
  • 您好,感谢您的回答。当我从控制台输出时,前 2 个复选框返回 False 和 False,但随后它给了我一个错误,因为页面的某些区域不可点击,所以那部分真的把我弄乱了
【解决方案2】:

我终于解决了

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

代码如下所示:

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);
}

【讨论】:

    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2020-04-25
    • 2016-11-02
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多