Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 单击页面的所有复选框而不使用任何循环_Selenium_Selenium Webdriver_Webdriver - Fatal编程技术网

Selenium 单击页面的所有复选框而不使用任何循环

Selenium 单击页面的所有复选框而不使用任何循环,selenium,selenium-webdriver,webdriver,Selenium,Selenium Webdriver,Webdriver,所以我在一次采访中被问到这个问题,关于如何在不使用任何循环的情况下单击网页的所有复选框/单选按钮。同时单击所有复选框,而不是遍历WebElement列表逐个执行。是否可以执行此操作。谢谢,您必须在WebElement列表上迭代才能实现这一点,从逻辑上讲,没有其他方法……如果有人,它必须以某种方式使用任何循环。选项1:您可以将JavaScript注入页面。JavaScript可以循环(仍然满足不在WebElements上循环的条件)来操作每个复选框属性,或者可以使用类似于-no explicit

所以我在一次采访中被问到这个问题,关于如何在不使用任何循环的情况下单击网页的所有复选框/单选按钮。同时单击所有复选框,而不是遍历WebElement列表逐个执行。是否可以执行此操作。谢谢,您必须在WebElement列表上迭代才能实现这一点,从逻辑上讲,没有其他方法……如果有人,它必须以某种方式使用任何循环。

选项1:您可以将JavaScript注入页面。JavaScript可以循环(仍然满足不在WebElements上循环的条件)来操作每个复选框属性,或者可以使用类似于-no explicit loop的JQuery函数(尽管JQuery内部可能仍然循环)

选项2:关注第一个复选框,然后将键(
选项卡
空格
)作为操作链或键序列发送。这可能只适用于某些Selenium绑定和某些浏览器,而不是所有页面,但作为抽象问题的抽象解决方案,它就可以了

选项3:与任何编程任务一样,可以用循环完成的任何事情都可以用递归完成。因此,不要创建循环,而是创建将所有复选框收集到长ActionChain中的递归。当递归退出时,将执行操作链,选中所有复选框

选项4:某些语言允许使用lambda函数,例如在Java中使用而不是循环。差不多

driver.findElements(By.xpath("//input[@type='checkbox']") ).stream().filter(checkbox -> !checkbox.isSelected()).forEach(checkbox -> checkbox.click()); 
尽管在引擎盖下面的某个地方可能是一个循环,但您并没有创建任何循环


我相信还有更多的选择。但正如我前面所说的,面试官的目的可能不是找出正确或实用的答案,而是看看你对硒概念的适应程度,以及你能带来什么样的创意

这是一个更适合我的问题


坦白地说,我会告诉面试官我觉得自己不适合,感谢他们抽出时间,然后结束面试。作为一个做过面试的人,我绝不会把时间浪费在这样的问题上。也许面试官的目的不是找出唯一正确的答案,而是看看你对Selenium概念有多满意,你可以将什么样的创造性想法带到表格中,等等。你可以通过使用
map
函数而不是迭代来实现这一点。
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("$('input:checkbox').removeAttr('checked');");