我正在使用 selenium + python 设计一个自动测试并面临所描述的问题。
当您单击“注册”按钮时,会出现一个带有文本的弹出窗口。我需要检查这个弹出窗口中的文本是否正确。 问题是这个窗口不是 html 布局的一部分,所以我无法使用 selenium 访问它。请问您能建议如何解决这个问题吗?弹出窗口
脚本如下:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from supporting_scripts import generate_random_string
from supporting_scripts import password
from configuration import chrome_options
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
class Registration:
driver.execute_script("window.open('https://site.example.com/service/welcome', '_blank');")
window_handles = driver.window_handles
driver.switch_to.window(window_handles[-1])
Button_Registration = WebDriverWait(driver, 60).until(
ec.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div[2]/p[1]")))
Button_Registration.click()
print('Registration click success ✅ ')
Button_Registration_Check = WebDriverWait(driver, 60).until(
ec.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/form/div/button")))
Button_Registration_Check.click()
time.sleep(10)
我尝试使用不同的库,但没有一个对我有用。
我确定的是,这个弹出窗口是一个浏览器窗口,它是由于输入规则 - type="email" 而显示的
您看到的弹出窗口是必需的 FORM 中 INPUT 字段的默认 HTML 行为。举个简单的例子,
<!DOCTYPE html>
<html>
<body>
<form>
<input required id="username">
<button type="submit">Submit</button>
</form>
</body>
</html>
当您单击“提交”按钮时,它会显示相同的消息。所以,你不需要验证它。您可以验证的是
required
属性是否位于不同的字段上。这样您就可以确认特定字段是必填字段,并且如果提交表单时未填写该字段,则会显示默认消息。
如果您有兴趣,我重写了您的代码以简化它和您的定位器,添加了等待等。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
URL = "https://it.videomost.com/service/welcome?lang=en"
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(URL)
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, "//p[text()='Sign up']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Sign Up']"))).click()