当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium处理html5约束验证弹出?

司空兴为
2023-03-14

照片说明了一切。点击“登录”按钮后,“请填写此字段。”出现弹出消息。看起来像是javascript的东西。我想通过使用Selenium获得这个弹出消息的文本。有可能吗?以下是电子邮件输入字段的html:

<input autocorrect="none" autocapitalize="none" spellcheck="false" autofocus="autofocus" class="cell small-21 form-text required" data-drupal-selector="edit-name" aria-describedby="edit-name--description" type="text" id="edit-name" name="name" value="" size="60" maxlength="60" required="required" aria-required="true" placeholder="Email or Username">

共有1个答案

朱伯寅
2023-03-14

您引用的弹出窗口是Constraint API的element.setCustomValidity()方法的结果。

注意:HTML5约束验证并不消除对服务器端验证的需求。即使预计无效表单请求要少得多,无效表单请求仍然可以由不兼容的浏览器发送(例如,没有HTML5和JavaScript的浏览器),或者由试图欺骗您的web应用程序的坏蛋发送。因此,与HTML4一样,您也需要验证服务器端的输入约束,其方式与客户端的操作一致。

若要检索元素.setCustomValidity()方法产生的文本,可以使用以下任一定位器策略:

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

driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
driver.get("https://accounts.us1.advisor.ws/user/login")
email_username = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.cell.small-21.form-text.required#edit-name[name='name']")))
print(email_username.get_attribute("validationMessage"))
Please fill out this field.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class validationmessage {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("start-maximized");
        options.addArguments("disable-infobars");
        options.addArguments("--disable-extensions"); 
        WebDriver driver =  new ChromeDriver(options);
        driver.get("https://accounts.us1.advisor.ws/user/login");
        WebElement email_username = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='cell small-21 form-text required' and @id='edit-name'][@name='name']")));
        System.out.println(email_username.getAttribute("validationMessage"));
    }
}

控制台输出:

Please fill out this field.
 类似资料:
  • 为了在将表单提交到服务器之前验证数据,HTML5 新增了一些功能。有了这些功能,即便JavaScript被禁用或者由于种种原因未能加载,也可以确保基本的验证。换句话说,浏览器自己会根据标记中的规则执行验证,然后自己显示适当的错误消息(完全不用JavaScript 插手)。当然,这个功能只有在支持HTML5 这部分内容的浏览器中才有效,这些浏览器有Firefox 4+、Safari 5+、Chrom

  • 我有一个有必填字段的表单,当我尝试提交有空白必填字段的表单时,屏幕截图中会显示如下所示的错误消息。对于Java中的Selenium,它不可能识别是否显示了错误消息,因为这些错误是HTML5,并且它们不存在于DOM中。于是我谷歌了一下,发现我们可以使用JavaScript。但当我使用它时,我每次都得到假,即使消息显示。您的帮助将不胜感激。 WebElement字段=driver.findElemen

  • 我已尝试在URL中发送用户名和密码 我已尝试使用报警处理,但不起作用。 我尝试了中提供的解决方案-如何使用Java处理Selenium WebDriver弹出的身份验证,几乎所有的解决方案都不是AutoIT,但没有一个对我有效 我有一个Maven项目,我正在尝试从project.properties文件发送带有用户名和密码的url,看起来像这样- URL=https://username:pass

  • 问题内容: 我正在尝试使用以下代码处理身份验证弹出窗口: 当我执行测试时,页面会显示身份验证弹出窗口,并且仍会加载直到我单击“取消”按钮。那一刻,我可以访问下一页,这意味着身份验证成功,但仍然始终显示身份验证弹出窗口 问题答案: 警报方法使你可以跳过“ Http基本身份验证”框。 从Selenium 3.4开始,它仍处于beta版本 目前,仅针对

  • 我正在尝试处理一个新的Webdriver脚本中的身份验证弹出。我对IE有一个工作的解决方案,但我对Chrome很纠结。IE很简单,只需遵循[本页]上的建议:如何使用Java处理Selenium WebDriver弹出的身份验证。这个线程并没有为Chrome提供一个很好的解决方案,尽管一些评论家指出,这个解决方案对Chrome不起作用。问题是,当你尝试在Chrome上执行下面的代码时,登录弹出并不是

  • 问题内容: 我使用 Selenium来 启动浏览器。如何处理要求浏览器接受证书的网页(URL)? 我重复我的问题: 当我启动 使用Selenium(Python编程语言)的浏览器(Internet Explorer,Firefox和Google Chrome)时,如何自动接受网站的证书? 问题答案: 对于Firefox,您需要将 选项设置为 : 对于Chrome,您需要添加参数 argument: