将Selenium函数存储到变量而不存储它之间有区别吗?

时间:2018-01-01 10:11:34

标签: python selenium

我最近一直在玩Selenium和Python,而使用Selenium的一件事就是函数调用,例如.find_element_by_name。您可以将调用存储到变量中。

我想知道......存储功能或使用功能有什么不同和好处吗?

此...

elem = driver.find_element_by_name('Hello')
elem.click()

...或

driver.find_element_by_name('Hello').click()  

3 个答案:

答案 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)

如果在执行函数之前存储对象,则获得:

  1. 可跟踪性 - 更简单调试的选项 - 您可以在点击查看对象并验证之前添加断点。

  2. 可读性 - 您不会在以后难以理解长句。

  3. 重构 - 您可以将该对象用于以后的操作,以防止代码重复。

  4. 在这种情况下,如果要在同一程序中多次使用相同的元素,它还会缩短运行时间。 例如

    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相关联的以下任何功能:

  • 明确()
  • 点击()
  • get_attribute(属性名称)
  • is_displayed()
  • is_enabled()
  • is_selected()
  • send_keys(* value)等

优点:

为返回的 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)