Selenium 单击页面的所有复选框而不使用任何循环
所以我在一次采访中被问到这个问题,关于如何在不使用任何循环的情况下单击网页的所有复选框/单选按钮。同时单击所有复选框,而不是遍历WebElement列表逐个执行。是否可以执行此操作。谢谢,您必须在WebElement列表上迭代才能实现这一点,从逻辑上讲,没有其他方法……如果有人,它必须以某种方式使用任何循环。选项1:您可以将JavaScript注入页面。JavaScript可以循环(仍然满足不在WebElements上循环的条件)来操作每个复选框属性,或者可以使用类似于-no explicit loop的JQuery函数(尽管JQuery内部可能仍然循环) 选项2:关注第一个复选框,然后将键(Selenium 单击页面的所有复选框而不使用任何循环,selenium,selenium-webdriver,webdriver,Selenium,Selenium Webdriver,Webdriver,所以我在一次采访中被问到这个问题,关于如何在不使用任何循环的情况下单击网页的所有复选框/单选按钮。同时单击所有复选框,而不是遍历WebElement列表逐个执行。是否可以执行此操作。谢谢,您必须在WebElement列表上迭代才能实现这一点,从逻辑上讲,没有其他方法……如果有人,它必须以某种方式使用任何循环。选项1:您可以将JavaScript注入页面。JavaScript可以循环(仍然满足不在WebElements上循环的条件)来操作每个复选框属性,或者可以使用类似于-no explicit
选项卡
和空格
)作为操作链或键序列发送。这可能只适用于某些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');");