【问题标题】:I tried to update all the existing value under my profile but its not working - Python selenium我试图更新我的个人资料下的所有现有值,但它不起作用 - Python selenium
【发布时间】:2021-04-16 06:28:00
【问题描述】:

所以我想更新我的配置文件下的所有现有值,在执行过程中我可以看到新值正在输入到文本字段中,但是一旦我的脚本执行单击保存按钮,它就会恢复到以前的状态价值。我很困惑有人可以帮助我吗:)拜托..

谢谢

这是我的脚本

driver.find_element_by_link_text('SIGN IN').click()
time.sleep(1)


#enter credentials
welcome = driver.find_element_by_xpath("//h1[contains(text(),'Welcome back!')]")
user_email = driver.find_element_by_name('email').send_keys("")
user_pass = driver.find_element_by_name('password').send_keys("")
driver.find_element_by_link_text('SIGN IN').click()

print(welcome.text)
print(driver.title)
print("sign in passed")


wait = WebDriverWait(driver, 5)
profile_id = wait.until(EC.presence_of_element_located((By.XPATH, "//header/div[1]/div[1]/img[1]")))
profile_id.click()
time.sleep(3)
prof_ele = driver.find_element_by_xpath("//a[contains(text(),'Edit Profile')]")
log_out = driver.find_element_by_xpath("//button[contains(text(),'Logout')]")
print(prof_ele.text)
print(log_out.text)
prof_ele.click()


#edit profile
#Name
driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[2]/div[1]/div[1]/*[1]").click()
name_ele = driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[2]/div[1]/div[1]/input[1]")
driver.execute_script("arguments[0].value=arguments[1]", name_ele, "My name is John")

# Occupation
driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[4]/div[1]/div[1]/*[1]").click()
occupation_ele = driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[4]/div[1]/div[1]/input[1]")
driver.execute_script("arguments[0].value=arguments[1]", occupation_ele, "QA analyst")

#about me
driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[4]/div[2]/div[1]/*[1]").click()
bio_ele = driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[4]/div[2]/div[1]/input[1]")
driver.execute_script("arguments[0].value=arguments[1]", bio_ele, "Nothing to say about me")

#birthday
driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[4]/div[3]/div[1]/*[1]").click()
birthday = driver.find_element_by_name("birthday")
driver.execute_script("arguments[0].value=arguments[1]", birthday, "1993-06-20")

#web
driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[4]/div[4]/div[1]/*[1]").click()
web_ele = driver.find_element_by_name("website")
driver.execute_script("arguments[0].value=arguments[1]", web_ele, "www.instagram.com")

#hobbies
driver.find_element_by_xpath("//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[4]/div[5]/div[1]/*[1]").click()
hobbies = driver.find_element_by_name("interests")
driver.execute_script("arguments[0].value=arguments[1]", hobbies, "Run, Eat, Photography")

time.sleep(3)

driver.find_element_by_xpath("//button[contains(text(),'Save')]").click()

alert = WebDriverWait(driver, 10).until(EC.alert_is_present())
print(alert.text)
alert.accept()

time.sleep(5)


print(name_ele.get_attribute('value'))
print(occupation_ele.get_attribute('value'))
print(bio_ele.get_attribute('value'))
print(birthday.get_attribute('value'))
print(hobbies.get_attribute('value'))

print("All tests passed!")


【问题讨论】:

  • 页面有链接吗?
  • 尽量避免电子邮件共享
  • 实际上它只是一封测试电子邮件:D 但我删除了屏幕截图和脚本:D

标签: python selenium


【解决方案1】:

我有 1 个字段的更新,请尝试检查一下:

import time

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()

driver.get('you_site')

driver.find_element_by_link_text('SIGN IN').click()
time.sleep(1)

# enter credentials
welcome = driver.find_element_by_xpath("//h1[contains(text(),'Welcome back!')]")
user_email = driver.find_element_by_name('email').send_keys("email")
user_pass = driver.find_element_by_name('password').send_keys("password")
driver.find_element_by_link_text('SIGN IN').click()

print(welcome.text)
print(driver.title)
print("sign in passed")

wait = WebDriverWait(driver, 5)
profile_id = wait.until(EC.presence_of_element_located((By.XPATH, "//header/div[1]/div[1]/img[1]")))
profile_id.click()
time.sleep(3)
prof_ele = driver.find_element_by_xpath("//a[contains(text(),'Edit Profile')]")
log_out = driver.find_element_by_xpath("//button[contains(text(),'Logout')]")
print(prof_ele.text)
print(log_out.text)
prof_ele.click()

# Name
driver.find_element_by_xpath("//input[@name='name']/following-sibling::*").click()
name_ele = driver.find_element_by_xpath(
    "//input[@name='name']")
name_ele.clear()
name_ele.send_keys("My name is John")

# NickName
driver.find_element_by_xpath("//input[@name='display_name']/following-sibling::*").click()
name_ele = driver.find_element_by_xpath(
    "//input[@name='display_name']")
name_ele.clear()
name_ele.send_keys("My name is NickName")

我建议使用 XPATH 引擎并阅读一下它,它非常强大,并尽量避免使用完全过时的选择器,例如:

//body/div[@id='root']/div[2]/div[2]/form[1]/div[2]/div[2]/div[1]/div[1]/*[1]

并替换为动态的,例如:

//input[@name='name']/following-sibling::*

【讨论】:

  • 看起来不错,但是当我尝试为昵称文本字段创建输入时,输入的是名称而不是昵称 ..@vova 我在下面发布了图片
  • @JHN 你应该先清除字段,我已经添加了
  • 我确实这样做了,但是应该在昵称文本字段中输入的值仍然在名称文本字段中。将发布屏幕截图
  • @JHN 很奇怪,只需仔细检查 #edit profile # Name driver.find_element_by_xpath("//input[@name='name']/following-sibling::node()").click () name_ele = driver.find_element_by_xpath("//input[@name='name']") name_ele.clear() name_ele.send_keys("My name is John") 对我来说一切正常
  • 哦,是的,我没有注意到我发送它是 name_ele 而不是昵称.. 感谢您的帮助 :) @vova 非常感谢您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2021-05-22
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
相关资源
最近更新 更多