【问题标题】:Why this xpath is not found为什么找不到此 xpath
【发布时间】:2021-06-28 18:19:38
【问题描述】:

当我使用检查元素打开时,我看到如下代码:

<div spellcheck="false" unselectable="off" class="appmagic-label-text" data-control-part="text" data-bind="{
            inlineEditText: properties.Text,
            css: {
              'appmagic-label-single-line': !properties.Wrap()
            },
            attr: {
              'aria-live': live,
              'aria-atomic': live() ? 'true' : null
            }
          }">Atostogų prašymai</div>

我正在尝试获取此文本“atostogų prašymai”xpath,但我无法找到它。

我尝试过的选项:

  1. By.cssSelector("div[class='appmagic-label-text']");
  2. 刚刚复制了 xpath By.cssSelector("div[class='//*[@id=\"publishedCanvas\"]/div/div[2]/div/div/div[5]/div/div/div/div/div']");

css 屏幕:

iframe 代码可见:

<iframe class="publishedAppIframe" tabindex="0" aria-hidden="false" id="fullscreen-app-host" scrolling="no" frameborder="0" name="fullscreen-app-host" src="https://pa-content.azureedge.net/resource/webplayerdynamic/publishedapp/preloadindex?preloadIndexPath=https%3A%2F%2Fcontent.powerapps.com%2Fresource%2Fapp%2Fupuvepsd66qk3%2Fpreloadindex.web.html&amp;PowerAppsLanguage=en-US&amp;loader=inline&amp;lv=jpigefv5ue8uc&amp;serviceWorkerUrl=https%3A%2F%2Fpa-content.azureedge.net%2Fresource%2Fwebplayer%2Fhashedresources%2Fqqhtjvhh4omr6%2Fjs%2FPowerAppsServiceWorker.PublishedApp.js&amp;piv=796D32DE&amp;featureGates={&quot;publishedAppServiceWorker&quot;:false}#%7B%22platform%22%3A%22notwindows%22%2C%22hideNavBar%22%3A%22true%22%2C%22antiCSRFToken%22%3A%22f01dae6c-0d74-4f48-8a74-95b9ee3d5943%22%2C%22cdnUrl%22%3A%22https%3A%2F%2Fcontent.powerapps.com%2Fresource%2Fapp%22%2C%22paramsQuery%22%3A%22tenantId%3Dde6e25a9-36c4-424d-af6b-431db29f6cfe%26appId%3D%2Fproviders%2FMicrosoft.PowerApps%2Fapps%2Fff261fd6-5458-4a3f-8697-f50ff8a1ff06%22%2C%22iframeMode%22%3Anull%2C%22packagePropertiesVersion%22%3A%222.1%22%2C%22staticContentProxy%22%3A%22https%3A%2F%2Fcontent.powerapps.com%2Fresource%2Fwebplayerdynamic%2Fproxy%2Fstaticcontent%3FstaticContentPath%3D%22%2C%22launchFunctionUrlFormat%22%3A%22https%3A%2F%2Fapps.powerapps.com%2Fplay%2F%7B0%7D%22%2C%22region%22%3A%22prod%22%2C%22staticContentUrl%22%3A%22https%3A%2F%2Fstatic.powerapps.com%22%7D" allow="geolocation; microphone; camera; fullscreen" style="" title="Atostogos"></iframe>

我认为有一些与 iframe 相关的方法:

public void selectIframe() {
        String parent = driver.getWindowHandle();
        for (String childHandle : driver.getWindowHandles()) {
            if (!childHandle.equals(parent)) {
                driver.switchTo().frame(childHandle);
            }
        }
    }

    public void selectParentFrame() {
        driver.switchTo().parentFrame();
    }

在这种情况下我该如何使用它们?

【问题讨论】:

  • 看起来您应该能够仅通过其类来选择它:By.cssSelector(".appmagic-label-text") 关于您的 XPath 尝试,您不能在字符串中使用 XPath 表达式,但如果您删除它可能会起作用开始和结束's。为什么您的 XPath 尝试比您的 CSS 尝试复杂得多?

标签: java selenium xpath css-selectors webdriver


【解决方案1】:

使用下面的xpath

//div[@class='appmagic-label-text'][contains(.,'Atostogų prašymai')]

始终构建您自己的 xpath。这里解释一下 // 代表相对路径,div 是标签,[ 代表条件开始,@class=''appmagic-label-text' 是查询,] 条件结束,这里我再次使用另一个条件为 or .[ 条件开始 , 包含查询以查找包含 , 的任何内容。代表任何东西,匹配 'Atostogų prašymai'。

请注意,我没有使用文本,因此它会找到任何与“Atostogų prašymai”匹配并以具有 appmagic-label-text 类的 div 标签开头的内容。

也有许多 xpath 构建可用。你可以用那个。但构建自己的 xpath 总是更好

【讨论】:

    【解决方案2】:

    我认为你搞砸了 css 选择器和 xpath。

    你的 xpath 应该是

    By.Xpath("//div[@class='appmagic-label-text']")
    

    或者更通用的

    By.Xpath("//div[@class='appmagic-label-text'][text()='Atostogų prašymai']")
    

    或者

      By.cssSelector("div.appmagic-label-text")
    

    更新: 由于 iframe 中的元素需要切换它。

    new WebDriverWait(driver,10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("fullscreen-app-host")));
    WebElement element=new WebDriverWait(driver,10).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='appmagic-label-text']")));
    

    要从 iframe 中跳出你需要使用

    driver.switchTo().defaultContent();
    

    【讨论】:

    • 感谢您的回答,但仍然找不到 xpath:org.openqa.selenium.TimeoutException:预期条件失败:等待 By.xpath 定位的元素的可见性://div[@class= 'appmagic-label-text'] (尝试 60 秒,间隔 50 毫秒
    • 元素可能在 iframe 内?你能检查一下 DOM 吗?
    • 如果网址是公开的,请分享您的网址?
    • 我没有看到 iframe。我已将图片发布到 css 的描述中,或者可能会更好?
    • 好的尝试存在的元素位于可能元素在页面上不可见。如果你得到同样的错误然后检查是否有 shadow-root 元素?
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2021-03-09
    • 2018-11-06
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多