Python/Selenium/PhantomJS-数据在执行之间保留。[英] Python/Selenium/PhantomJS - Data retained between execution

问题描述

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

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

屏幕截图

在此处输入图片描述

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

请找到python代码片段 -

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 中开发

图片 - 点击前在此处输入图片描述

图片 - 点击后在此处输入图片描述

推荐答案

该站点可能正在缓存用户输入到 cookie 或本地存储中.网站通常会这样做,以允许您在页面之间来回导航,或者稍后返回表单,而无需再次填写所有详细信息.例如,这就是网站在 React 中保持状态的方式.

您可以使用浏览器的开发工具找出答案.例如,以下是您在 Chrome 中的操作方法.该图显示了可能正在使用的各种类型的存储.

Chrome 开发工具本地存储检查

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

driver.delete_all_cookies()

也可以删除个别cookies.

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

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

这将删除与当前域关联的所有本地存储.与 cookie 一样 有一些方法可以访问单个项目,如有必要.

本文地址:https://www.itbaoku.cn/post/1740177.html