【问题标题】:How to get the Email/Text entered into a field when there is no "value" attribute or text in the code snippet for Java Selenium当 Java Selenium 的代码片段中没有“值”属性或文本时,如何将电子邮件/文本输入到字段中
【发布时间】:2019-11-02 23:38:31
【问题描述】:

我想获取使用 java 代码输入的电子邮件 ID“arjun_123@gmail.com”。 我尝试了以下代码,但它总是返回 null。

我真正需要的是,我想检查电子邮件是否成功输入。有时,电子邮件没有被输入。所以我想检查字段是否为空并检索输入的文本。

email.getAttribute("innerText");
email.getAttribute("innerHTML");
email.getAttribute("textContent");
email.getText();

【问题讨论】:

    标签: java selenium html-content-extraction getattribute constraint-validation


    【解决方案1】:

    以这种方法传递您的电子邮件 xpath。你会得到输入的文字

        public String getTextofInputBox(By by) {
    
        JavascriptExecutor js = (JavascriptExecutor) driver; 
        String value = (String)((js).executeScript("return arguments[0].value",driver.findElement(by)));
        return value;
    }
    

    【讨论】:

    • 这太复杂了,价值不大,selenium 已经提供了一种从 WebElement 属性中获取数据的方法。
    • 我也遇到过同样的情况,偶数值字段不会返回输入的税金。它将由 JavascriptExecutor 完成
    • 上面的 JavaScript Snippet 正在返回 value 属性。除非在 DOM 中更新了 value 属性,否则这将无法工作,这意味着它与内置的 selenium 功能完全相同。这只是额外的复杂性,绝对没有任何价值。
    • 我有同样的情况。 email.getAttribute("值");如果 Value 属性中没有任何内容,则此代码不起作用。
    • @NayanThakor 你不是在用更复杂的方式在 arguments[0].value 中做同样的事情吗?
    【解决方案2】:

    你拉错了属性,你要使用的是value:

    email.getAttribute("value");
    

    【讨论】:

    • value 属性仅在 html DOM 中指定 value 属性时才返回值。有时它可能不起作用。更好的是我们可以像@Nayan Thakor's answer中那样使用javascript执行器
    • 如果您在输入元素中输入一些文本,它将在 DOM 中设置 value 属性。这就是 元素的工作方式。下面的 JavaScript 解决方案也是从 DOM 中读取 value 属性。它正在复制 Selenium 功能。
    • 并非总是如此。它取决于开发人员代码。它可能不会在某些应用程序中设置值。
    • <input> 元素就是这种情况,它们是这样工作的:developer.mozilla.org/en-US/docs/Web/HTML/Element/input#value。我同意你不能排除这样一个事实,即开发人员可以故意做一些完全愚蠢的事情(就像我不能保证开发人员不会在 JavaScript 中将 true 重新定义为 false 一样),但在 99.99% 的情况下它会工作,如果没有,那就是开发人员需要修复的错误。
    【解决方案3】:

    <input>元素

    根据文档 HTML <input> element 是 HTML 表单接受用户数据的交互式控件。


    数据验证

    Data validation 帮助我们确保用户以正确的格式填写了所需的字段,以确保提交的数据将被应用程序/Web 服务器成功接受。

    根据快照:

    <input> 元素包含通过属性 data-validate 进行的 JavaScript 验证,该属性有 2 个子验证,分别为 'validate-email':true'required':true强>。这些 Javasript 验证验证在 <input> 字段中输入的文本。

    因此,一旦 Javasript 验证完成,您就可以提取您在 EMAIL 字段中输入的文本,即 arjun_123@gmail.com 诱导 WebDriverWait使用以下解决方案:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(email).getAttribute("value"));
    

    【讨论】: