【问题标题】:"Invalid Selector Used for Locator " error for xpath locator while using findelements使用 findelements 时 xpath 定位器的“用于定位器的选择器无效”错误
【发布时间】:2019-03-27 15:44:57
【问题描述】:

Job.JobTitles.Add.JobTitleValidMessage 的 xpath 是:

//input[@id='jobTitle_jobTitle']/following-sibling::span

它在代码的第一行给出 NullPointerException。如何解决这个问题?

List<WebElement> job_valid_message = TestBase.findElements("Job.JobTitles.Add.JobTitleValidMessage");
        if (job_valid_message.size()==1) {
            return !job_valid_message.get(0).isDisplayed();
        } else
            return true;

元素的HTML源代码

<li> <label for="jobTitle_jobTitle">Job Title <em>*</em></label> <input type="text" name="jobTitle[jobTitle]" maxlength="100" id="jobTitle_jobTitle" class="validation-error"><span for="jobTitle_jobTitle" generated="true" class="validation-error">Required</span> </li> 

【问题讨论】:

  • 欢迎来到 SO。能否分享一下 Input 元素的 HTML。
  • 必需
  • 请在问题部分而不是在评论部分分享 HTML 源代码...
  • 什么是TestBase?它是如何以及在哪里定义的?
  • 标签: java list selenium


    【解决方案1】:

    正确的代码应该是。

    List<WebElement> job_valid_message = TestBase.findElements(By.xpath("//input[@id='jobTitle_jobTitle']/following-sibling::span");
    if (job_valid_message.size()>0) {
            return true; //message is displayed
        } else
            return false; //message not displayed
    

    如果您想直接访问 span,也可以使用 css span[for='jobTitle_jobTitle' ][class='validation-error']

    【讨论】:

    • 你认为这个xpath是正确的用户已经分享了html源请编辑和更正它..
    • 是的,它是正确的 xpath。在我的帖子之后得到了 html,但 xpath 仍然很好,刚刚确认。
    • /following-sibling::span 是什么?
    • 同一父节点下input旁边的span元素。
    • @Shivam Poojara 如果您认为问题已解决,请点击我的回答左侧的否决按钮下方的复选标记来接受回答,以便我们关闭此问题。
    【解决方案2】:

    假设TestBase 是控制某些浏览器的驱动程序,我会使用

    List<WebElement> job_valid_message = TestBase.findElements(By.cssSelector('span.validation-error');
    

    【讨论】:

      【解决方案3】:

      TestBase 类似乎是您调用 findElements 方法的框架类。由于参数中没有By定义,我建议您检查参数是字符串还是By。如果用字符串重载,默认的定位器定义是什么(如cssSelector、xpath等)。

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签