所以我在面试中被问到如何在不使用任何循环的情况下单击所有复选框/ WebPage的Radiobutton。单击所有复选框同时,不遍历WebElement列表逐个执行。甚至可以这样做。谢谢
选项1:您可以将JavaScript注入页面。 JavaScript可以循环(仍然满足你不通过WebElements循环的条件)来操作每个复选框属性,或者你可以使用类似于this的JQuery函数 - 没有显式循环(尽管内部JQuery可能仍然循环)
选项2:关注第一个复选框,然后发送键(tab
和space
)作为ActionChain或键序列。这可能仅适用于某些Selenium绑定和某些浏览器,也不适用于所有页面,但作为抽象问题的抽象解决方案,它可以做到。
选项3:与任何编程任务一样,任何可以通过循环完成的操作都可以通过递归完成。因此,创建递归而不是创建循环,将所有复选框收集到长ActionChain中。当递归退出时,执行动作链,检查所有复选框。
选项4:某些语言允许使用lambda函数,例如在Java中使用streams而不是循环。就像是
driver.findElements(By.xpath("//input[@type='checkbox']") ).stream().filter(checkbox -> !checkbox.isSelected()).forEach(checkbox -> checkbox.click());
虽然再次,在引擎盖下面的某个地方它可能是一个循环,但你没有创建任何循环。
我相信还有更多的选择是可能的。但正如我之前所说,面试官的意图可能不是找出正确或实际的答案,而是要了解你对Selenium概念的满意程度,以及你可以带来什么样的创意。
这是一个更适合PCG的问题。
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("$('input:checkbox').removeAttr('checked');");
你必须迭代WebElement列表来实现这一点,逻辑上没有其他方法......如果有人,它必须以某种方式使用任何循环。