我一直在尝试使用图片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
几句话。
理想情况下,你需要开始寻找 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);
你可以在以下文章中找到一些相关的讨论。