因此,在采访中有人问我这个问题,即如何不使用任何循环就单击WebPage的All复选框/单选按钮。同时单击所有复选框,而不是遍历WebElement列表一步一步地进行操作。甚至可以这样做。谢谢
答案 0 :(得分:1)
选项1 :您可以将JavaScript注入页面。 JavaScript可以循环(仍然满足您不循环遍历WebElement的条件)来操纵每个复选框属性,或者您可以使用类似于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());
尽管如此,在引擎盖下面的某个地方可能是一个循环,您并未创建任何循环。
我确信还有更多选择。但是,正如我前面所说,面试官的目的可能不是找到正确或实际的答案,而是要看您对硒概念的适应程度以及可以提出什么样的创意。
答案 1 :(得分:0)
这是一个更适合PCG的问题。
from tornado.ioloop import PeriodicCallback
class MyClass(object):
def __init__(self):
self.dict = {}
PeriodicCallback(self._check_status, 3000).start()
...
def foo(self):
self.dict["efg"] = 20
print (id(self.dict)) # 1st print
def _check_status(self):
self.dict["abc"] = 10
print ( id(self.dict)) # 2nd print
答案 2 :(得分:-1)
您必须遍历WebElement列表才能实现此目的,从逻辑上讲,没有其他方法...如果有任何人,则必须以某种方式使用任何循环。