我最近一直在玩Selenium和Python,而使用Selenium的一件事就是函数调用,例如.find_element_by_name。您可以将调用存储到变量中。
我想知道......存储功能或使用功能有什么不同和好处吗?
此...
elem = driver.find_element_by_name('Hello')
elem.click()
...或
driver.find_element_by_name('Hello').click()
答案 0 :(得分:1)
两种方法之间没有显着差异。如果您存储了大量变量,则可能会开始看到内存使用量的增加。
如果我不打算重复使用该元素,我采用的方法是使用单行。
driver.find_element_by_id('id').send_keys('test')
如果我需要多次引用该元素,我会将其存储在变量中。
input = driver.find_element_by_id('id')
input.clear()
input.send_keys('test')
如果您使用变量,则必须更加注意在使用之间对页面执行的操作。例如,如果您获取对INPUT
的引用,请刷新页面,然后尝试单击它,您将获得过时元素引用异常。因此,有时您可能会两次引用相同的元素,但是由于页面在使用之间更新,因此您不会将其存储。
答案 1 :(得分:0)
如果在执行函数之前存储对象,则获得:
可跟踪性 - 更简单调试的选项 - 您可以在点击查看对象并验证之前添加断点。
可读性 - 您不会在以后难以理解长句。
重构 - 您可以将该对象用于以后的操作,以防止代码重复。
在这种情况下,如果要在同一程序中多次使用相同的元素,它还会缩短运行时间。 例如
elem = driver.find_element_by_name('Textbox')
elem.clear()
elem.send_keys('text')
答案 2 :(得分:0)
是您始终可以存储函数调用中的返回数据,例如 find_element_by_name()
。
根据文档 find_element_by_name()
来自selenium.webdriver.remote.webdriver类,返回WebElement。当返回 WebElement
时,您可以调用与WebElement
相关联的以下任何功能:
为返回的 WebElement
调用所需方法具有以下优势:
一些例子:
driver.find_element_by_name('element_name').clear()
driver.find_element_by_id('element_id').click()
driver.find_element_by_link_text("element_link_text").is_enabled()
driver.find_element_by_css_selector("element_css").get_attribute(attribute_name)
driver.find_element_by_xpath("element_xpath").send_keys(*value)