【问题标题】:Python/Selenium/PhantomJS - Data retained between executionPython/Selenium/PhantomJS - 执行之间保留的数据
【发布时间】:2017-04-19 14:08:04
【问题描述】:

我正在尝试学习 Selenium。我正在使用 Python 2.7。幻影 JS - 2.1.1.

背景 - 脚本正在尝试将数据输入到控件中。该脚本能够抓住控件。但是,旧执行的数据会被保留。

屏幕截图

其他细节 正如您在 EMAIL 框中看到的那样,保留了最后的执行数据。在复选框中,我单击了相同的复选框,然后它显示为未选中。至于名称字段 - 我使用了 clear() 方法,并且清除了早期的数据。同样的方法不适用于电子邮件文本框。

请找python代码sn-p -

import time,traceback
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

COMPANY_NAME = 'AHXJ OF KCH'
FIRST_NAME = 'Bill'
LAST_NAME = 'CLINTON'
EMAIL = 'bill.clinton@whitehouse.com'

driver = webdriver.PhantomJS()
driver.delete_all_cookies()
driver.implicitly_wait(10)
driver.set_window_size(1120, 550)
try:
    driver.get("https://username:password@url/")
    select_state = Select(driver.find_element_by_id('state_abbrev'))
    select_state.select_by_visible_text('Arizona')
    time.sleep(5)
    select_business_segment =           Select(driver.find_element_by_id('business_segment_id'))
    select_business_segment.select_by_visible_text('IT/Technology')
    time.sleep(5)
    select_business_type = Select(driver.find_element_by_id('business_type_id'))
    select_business_type.select_by_visible_text('Application Development')
    driver.save_screenshot(COMPANY_NAME+ '_home_page_screenshot.png')
    driver.find_element_by_xpath('//*[@id="chubb_commercial_entry_form"]/div/button').click()
    time.sleep(10)
    #wait = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'product_codes__bop')))
    driver.find_element_by_xpath('//*[@id="field_for_product_codes__bop"]/label').click()
    comp_name = driver.find_element_by_id('business_name')
    comp_name.clear()
    comp_name.send_keys(COMPANY_NAME)
    email = driver.find_element_by_id('email')
    email.clear()
    email.send_keys(EMAIL)
    driver.save_screenshot(COMPANY_NAME+ '_business_info_screenshot.png')
    driver.find_element_by_xpath('//*[@id="commercial-app"]/div/div[2]/div[2]/div/div[2]/form/div[1]/div/div/button').click()
    time.sleep(10)
   ...
except Exception,e:
    print e
    driver.save_screenshot('error_screenshot.png')
    traceback.print_exc()
finally:
    driver.quit()

编辑 2 - 附加信息

  1. 该网站是使用 ReactJS 制作的。由于我在 React 中为零,我不知道它是如何工作的。我想改变 HTML 输入属性的值,但在检查时我发现它总是正确的
  2. 我认为问题不在于复选框,我觉得这是我执行 Python 和 Selenium 的方式的问题,因为数据是跨页面和跨脚本执行保存的
  3. 不确定,如果这一点很重要 - 我正在 c9.io 中开发

图片 - 点击前

图片 - 点击后

【问题讨论】:

  • 如果您仅包含重现您的问题所需的代码,这可能对您和我们都有帮助。例如,删除电子邮件位之后的所有内容,并删除之前的所有内容,这对于重现您要纠正的行为是不必要的。
  • 以下答案之一可能对您有所帮助:stackoverflow.com/questions/3249583/…
  • @MarkLapierre,感谢您的链接。它解决了与文本字段相关的问题。但是它并不能解决所有问题,复选框中的值仍然保留。
  • 目前还不清楚发生了什么。你能改变复选框的值吗?如果是这样,我建议如果您想要检查它,请检查它,或者如果您希望它不选中,请取消选中它。如果这没有帮助,您能否确切地告诉我复选框发生了什么,以及您希望发生什么?
  • @MarkLapierre,我在原始帖子的“编辑 2 - 附加信息”下提供了更多详细信息。 First Pass:我在登录后在所有不同的页面中输入数据。 Second Pass - 我在 Pass 1 中输入的数据被保留。因此,我必须在输入新数据之前清理数据。可以清理文本框,下拉不会造成问题。但是复选框和单选按钮会带来问题。如果在第一遍中单击“是”,则在第二遍中将其保留,这是我不想要的

标签: python selenium phantomjs


【解决方案1】:

该站点可能在 cookie 或本地存储中缓存用户输入。站点通常会这样做,以允许您在页面之间来回导航,或者稍后返回表单,而无需再次填写所有详细信息。例如,this is how a site might persist state in React

您可以使用浏览器的开发工具找出答案。例如,here's how you'd do that in Chrome。该图显示了可能正在使用的各种类型的存储。

如果您想在没有任何先前输入的情况下开始每个测试,则需要将其删除。如果网站存储了 cookie,而您没有要保存的任何其他 cookie,您可以删除全部

driver.delete_all_cookies()

也可以delete individual cookies

如果该站点使用本地存储,则目前使用 python 有点小技巧,因为它看起来不像 python 绑定实现访问本地存储的方法,like java does。我可能是错的。但是你可以使用 javascript,像这样:

driver.execute_script('window.localStorage.clear();')

这将删除与当前域关联的所有本地存储。如有必要,与 cookie there are ways to access individual items 一样。

【讨论】:

  • 谢谢马克。我试过了,它有效。数据存储在本地存储中。
猜你喜欢
  • 2019-05-17
  • 1970-01-01
  • 2015-08-11
  • 2017-04-06
  • 2013-05-20
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多