【问题标题】:driver.execute_script("window.history.go(-1)") not working in chrome driverdriver.execute_script("window.history.go(-1)") 在 chrome 驱动程序中不起作用
【发布时间】:2020-12-22 06:26:19
【问题描述】:

我正在使用 Selenium Python 进行自动化测试。所以我尝试导航回上一页,并在我的脚本中包含了这行代码:

driver.execute_script("window.history.go(-1)")

但是它不起作用,它没有导航回上一页。这是我的全部代码:

from selenium import webdriver
import time

#define variable driver
def func1():
    driver = webdriver.Chrome("C:/Users/sabrina/Downloads/chromedriver_win32/chromedriver.exe")
    driver.get("url")
    return driver

driver = func1()
driver.maximize_window()
time.sleep(3)

#click email button
driver.implicitly_wait(10)
emailbutton = driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/button[1]')
emailbutton.click()
time.sleep(1)
driver.implicitly_wait(10)

#enter email & password
driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/form/div[1]/div/div/div[1]/div/input').send_keys("email")
driver.implicitly_wait(50)
driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/form/div[2]/div/div/div[1]/div/input').send_keys("password")
driver.implicitly_wait(50)

#assertion/checkpoint
element3 = driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div[3]').text
assert element3 == "Forgot your password?"

#click Login with Email button
driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div[2]/button').click()
driver.implicitly_wait(50)
element4 = driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/div[1]/main/div[1]/div[1]/div[2]/button').text
assert element4 == "MAKE REQUEST"

#click Messages
driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/header/div[1]/div/div/button[3]/div[2]').click()
time.sleep(2)

#choose requests with "Negotiation" status
element_negoreq = driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div[2]/div/div/div/div/div/div[1]/div/div[3]/div[3]')
if (element_negoreq.text == "Negotiation"):
    element_negoreq.click()

    #click Book Now
    driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div/div[2]/div[1]/div/div/div/div[2]/div[2]/button[2]').click()

    #tick Agree
    time.sleep(3)
    #driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div[11]/div/div/div[1]').click()

    #assert checkout word in current url
    assert "checkout" in driver.current_url
    print(driver.current_url)

    #click Boost
    driver.implicitly_wait(10)
    driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div[12]/div/button[1]').click()
    driver.execute_script("window.history.go(-1)")

导航返回脚本行之前的所有代码都在工作,直到到达该行。我也尝试使用driver.back(),但也没有工作。与我的缩进有什么关系,或者我不包含/导入相关模块?谁能给点建议?

【问题讨论】:

  • 您收到的错误信息是什么?
  • 实际上没有错误信息。它说“进程以退出代码 0 完成”
  • 好的,点击你在 driver.execute_script("window.history.go(-1)") 之前写的期望是什么?它正在加载任何新页面??
  • 是的...它会加载新页面。
  • 请参阅答案部分,因为我无法将所有信息都放在一条评论中,我已在答案部分提供。我希望它能消除你的疑虑。如果它不起作用,请告诉我。

标签: python selenium automated-tests selenium-chromedriver


【解决方案1】:

要简单地回到上一个 url 做这两件事。

driver.back()
driver.refresh()

【讨论】:

  • 首先我已经添加了这两行,但它没有转到当前页面。然后我在这两行之前添加了 time.sleep() 并且它已经工作了。谢谢。但我可以知道为什么我不能使用 driver.execute_script("window.history.go(-1)") 吗?
  • 它可能还没有完成它正在执行的任何操作。
  • 尝试使用 Webdriver 等待查找元素并单击它们。而不是各种隐式等待和 time.sleep()。
  • 不能使用隐式等待?为什么?
  • time.sleep(1) driver.implicitly_wait(10) 你有一些做同样的事情。
【解决方案2】:

正如你所确认的,在执行行之后

driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div[12]/div/button[1]').click()

正在加载一个新页面。由于您的页面尚未完全加载并且java脚本单击了后退按钮,因此它无效。您可以在此处引入某种等待机制以确保页面已完全加载。最简单的方法是使用 time.sleep() ,但这不是一个好的解决方案。我能想到的最佳解决方案是使用如下的显式等待:

driver.find_element_by_xpath('//*[@id="q-app"]/div/div[2]/main/div/div[12]/div/button[1]').click()
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, '<xpath of any element on new page>'))) #It will insure page is loaded completely.
driver.execute_script("window.history.go(-1)")

请尝试上面的代码,它会按预期返回。

【讨论】:

  • 我已经尝试过您的代码,但它没有按预期导航回上一页。
猜你喜欢
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2017-01-15
  • 2018-07-21
  • 1970-01-01
相关资源
最近更新 更多