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

Java(Eclipse)-Selenium-xpath-无法识别Web元素

申屠俊发
2023-03-14

我对硒很陌生。

我尝试构建一个测试来验证网页元素(小图标)是否显示在页面上。

因此,在我的类的顶部,我通过xpath定义了Web元素。
Xpath我在应用右键单击元素并单击检查后从检查中复制。

@通过(xpath=“//*[@id=”referrals“]/tbody/tr[2]/td[2]/div/img[2]”)私有WebElement链和twoarrowsicon查找;

然后在同一个类中,我有一个方法来评估我的图标是否出现:

public boolean IconChainWithArrowIsFound() throws InterruptedException {
    return ChainAndTwoArrowsIcon.isDisplayed()
            && ChainAndTwoArrowsIcon.getAttribute("title").toString().contains("Associated, and was successfully sent.");   
}

这是我的代码的最后一部分,我在同一代码中使用的所有xpath引用在所有代码中都工作得很好。

但是,在运行结束时,我发现我描述的这个位有一个错误:

组织。openqa。硒。NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id=“references”]/tbody/tr[2]/td[2]/div/img[2]”

请参见所附图片

xPath图像

我能给你一个可能出错的建议吗?提前谢谢你。

共有2个答案

洪和平
2023-03-14

请检查页面是否有框架/iframe,以及您试图查找的元素是否在框架/iframe中。如果是这样,您需要首先使用驱动程序切换到上述帧。切换到()。frame('frameName'),然后您应该能够找到您的元素。

督翰学
2023-03-14
isDisplayed() 

如果找不到元素,将导致NoTouchElementException。如果找到它,它将正常工作。

基本上,您永远无法确定它是否有效,因为它直接依赖于元素定位器,这不是最佳实践。

有两种方法可以处理这种情况

  1. 改用findElements:

代码:

@FindBy(xpath = "//*[@id='referrals']/tbody/tr[2]/td[2]/div/img[2]") 
private List<WebElement> ChainAndTwoArrowsIcon;

public boolean IconChainWithArrowIsFound() throws InterruptedException {
    boolean flag = false;
    List<WebElement> elements  = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElements(ChainAndTwoArrowsIcon));
    if (elements.size()>0) {
        System.out.println("Element is visible");
        ChainAndTwoArrowsIcon.get(0).getAttribute("title").toString().contains("Associated, and was successfully sent."); 
        return flag = true;
    }
    else {
        System.out.println("Element is not visible");
        return flag;
    } 
}

基本上,如果找到元素,findElements将返回一个列表,如果找不到元素,那么我们将有一个空列表。根据列表的大小,我们导出了上面的if和else。

代码

@FindBy(xpath = "//*[@id='referrals']/tbody/tr[2]/td[2]/div/img[2]") 
private WebElement ChainAndTwoArrowsIcon;

public boolean IconChainWithArrowIsFound() throws InterruptedException {
    try {
        return ChainAndTwoArrowsIcon.isDisplayed()
                && ChainAndTwoArrowsIcon.getAttribute("title").toString().contains("Associated, and was successfully sent."); 
    }
    catch (Exception e) {
        System.out.println("Something went wrong.");
        e.printStackTrace();
        return false;
    }
}
 类似资料:
  • 我使用Selenium WebDriver与Java。 下面是我的html代码: 我通过包含特定文本的xpath定义了一个WebElement。 它不起作用。但是,当我用一个词搜索时,没有任何空格,它工作正常。 这似乎是空间的问题。 请帮助。 蒂亚。

  • 我正在使用Selenium WebDriver从下拉列表中获取值。不幸的是,我无法获取它,因为我的代码无法识别xpath。 这是我的代码: 问题在于第1行(WebElement选择器)。在输出中,我得到如下结果: 线程“main”组织中出现异常。openqa。硒。InvalidSelectorException:无法计算xpath表达式“id('search”)/x:fieldset/x:tabl

  • 下面的代码应该做到以下几点:1。连接到www.brainly.ro并使用凭据2登录。打开用户窗口Lola1511 3。打开所有已回答的问题,查看是否已通过审核。如果未批准,则批准。 下面我发布了我的整个代码(到站点的链接和凭据都在那里)

  • 问题内容: 我使用,当我得到 我删除了构建路径,然后又做了 ,仍然是同样的错误。 问题答案: 该代码不是Java SE的一部分,因此这些类将不在JRE中。您需要找到并下载包含这些类的JAR文件,然后将其添加到Eclipse构建路径中。 (可以在此处下载JAR的一个地方,但是如果此链接中断,可以轻松进行自己的搜索。请转到Maven Central或findjar。)

  • 下面是selenium找不到元素的代码。 但不知何故,它失败了,对我不起作用。它总是给我以下例外情况:过时的元素引用:元素未附加到页面文档 添加了--GetElementStextList的代码 感谢任何帮助。谢谢

  • 我在eclipse中签出了一个gradle项目,但它不能识别任何注释 其中配置是注释。 所有与注释对应的导入也失败,错误如下: 包含所有文件的整个项目将填充错误。但在Intellij中,同样的项目不存在这样的问题。我错过了Eclipse的哪一个设置? gradle build工作很好,尽管