首页 > 解决方案 > driver.execute_script("window.history.go(-1)") 在 chrome 驱动程序中不起作用

问题描述

我正在使用 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()但也无法正常工作。与我的缩进有什么关系,或者我不包含/导入相关模块?任何人都可以建议吗?

标签: pythonseleniumautomated-testsselenium-chromedriver

解决方案


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

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)")

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


推荐阅读