Selenium Webdriver检查是否使用id显示图片。

问题描述 投票:0回答:1

我一直在尝试使用图片ID检查图片是否显示在我的页面上。我找过类似的帖子,但找不到一个能解决我的问题的帖子。

我不知道为什么我的错误信息说 css选择器我试图用它的id找到元素。

任何想法将是巨大的,谢谢?

测试。

public void CheckBannerImage()
{
    var UrlRefLibrary = new UrlStrings();
    string HomeUrl = UrlRefLibrary.GetHomePageLocalHostUrl();
    using IWebDriver driver = new ChromeDriver();
    IWebElement BannerImageElement = driver.FindElement(By.Id("HomePageBanner"));

    driver.Navigate().GoToUrl(HomeUrl);
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

    Assert.True(BannerImageElement.Displayed);

}

Index.cshtml

@model HomeViewModel
@{
    ViewData["Title"] = _loc[Model.PageTabTitle];
}
<div class="text-center">
    @section header_image{
        <div class="bg-img" id="HomePageBanner">
    }
</div>
</div>

_Layout.cshtml

<body>
    <header>
        @RenderSection("header_image", required: false)
    </header>
</body>

错误。

Message: 
    OpenQA.Selenium.NoSuchElementException : no such element: Unable to locate element: {"method":"css selector","selector":"#HomePageBanner"}
      (Session info: chrome=83.0.4103.61)
  Stack Trace: 
    RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
    RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
    RemoteWebDriver.FindElement(String mechanism, String value)
    RemoteWebDriver.FindElementById(String id)
    <>c__DisplayClass16_0.<Id>b__0(ISearchContext context)
    By.FindElement(ISearchContext context)
    RemoteWebDriver.FindElement(By by)
    TestHomepageComponentsArePresent.CheckBannerImage() line 21
selenium selenium-webdriver xpath css-selectors webdriverwait
1个回答
1
投票

几句话。

  • 理想情况下,你需要开始寻找 WebElement 只有在你调用 Navigate().GoToUrl(). 因此,顺序将是。

    driver.Navigate().GoToUrl(HomeUrl);
    IWebElement BannerImageElement = driver.FindElement(By.Id("HomePageBanner"));
    
  • 虽然你已经声明了一个 WebDriverWait 作为 wait 你但还没有利用它,而寻找元素。

  • 最后,根据讨论,在 网盘驱动的官方定位策略 其外 所有其他定位器策略都被转换为 执行时。

解决办法

要检查图像是否显示在网页上,你必须诱导出 WebDriverWait 对于 ElementIsVisible 你可以使用以下任何一种解决方案。

  • 使用 身份证:

    public void CheckBannerImage()
    {
        var UrlRefLibrary = new UrlStrings();
        string HomeUrl = UrlRefLibrary.GetHomePageLocalHostUrl();
        using IWebDriver driver = new ChromeDriver();
        driver.Navigate().GoToUrl(HomeUrl);
        IWebElement BannerImageElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.Id("HomePageBanner")));
        Assert.True(BannerImageElement.Displayed);
    }
    
  • 使用 CssSelector:

    public void CheckBannerImage()
    {
        var UrlRefLibrary = new UrlStrings();
        string HomeUrl = UrlRefLibrary.GetHomePageLocalHostUrl();
        using IWebDriver driver = new ChromeDriver();
        driver.Navigate().GoToUrl(HomeUrl);
        IWebElement BannerImageElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("#HomePageBanner")));
        Assert.True(BannerImageElement.Displayed);
    }
    
  • 使用 XPath:

    public void CheckBannerImage()
    {
        var UrlRefLibrary = new UrlStrings();
        string HomeUrl = UrlRefLibrary.GetHomePageLocalHostUrl();
        using IWebDriver driver = new ChromeDriver();
        driver.Navigate().GoToUrl(HomeUrl);
        IWebElement BannerImageElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='HomePageBanner']")));
        Assert.True(BannerImageElement.Displayed);
    }
    

最新情况

如果您使用的是 您需要使用的软件包 SeleniumExtras.WaitHelpers.ExpectedConditions 如下所示。

  • 使用 身份证:

    IWebElement BannerImageElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.Id("HomePageBanner")));
    Assert.True(BannerImageElement.Displayed);
    
  • 使用 CssSelector:

    IWebElement BannerImageElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.CssSelector("#HomePageBanner")));
    Assert.True(BannerImageElement.Displayed);
    
  • 使用 XPath:

    IWebElement BannerImageElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='HomePageBanner']")));
    Assert.True(BannerImageElement.Displayed);
    

参考资料

你可以在以下文章中找到一些相关的讨论。

© www.soinside.com 2019 - 2024. All rights reserved.