python - 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()
但也无法正常工作。与我的缩进有什么关系,或者我不包含/导入相关模块?任何人都可以建议吗?
解决方案
正如您所确认的,在执行行之后
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)")
请尝试上面的代码,它将按预期返回。
推荐阅读
- python - 在 __init__ 中应用属性设置器逻辑
- apache-spark - 如何计算和获取 Spark Dataframe 中唯一 ID 的值总和?
- xamarin.forms - 如何为具有棱镜的 Xamarin 表单中的内容视图创建单独的视图模型?
- python - DynamoDB 更新一个字段,该字段具有 JSON 作为值,整数/数字字符串作为 python 中的键
- visual-studio-2017 - .NET Standard 2 Base NuGet 包无故显示错误
- python - 使用 apache-airflow ( cloud-composer) 调度从 BigQuery 到 MongoDB 的负载
- c - 使用 fopen、fgetc、fput 和 fclose 函数将字符串从 input.txt 复制到 output.txt
- ethereum - 一个地址 [ ] 中可以存储多少个地址
- selenium - 用于转换为 mobileweb 的 ChromeOptions 不适用于 RemoteWebDriver
- ios - 数据库插入和加载 Tableview 方法