我是Selenium和c#的新手,所以我已经走到了尽头。我需要知道如何查看天气图像src文件是否存在。当我的意思是存在时,它是否显示在页面上(不是没有图像时得到的红色x框)。
我试过file.exists(@c://imagename)
;和System.File.Exists
我不知道这是否正确。
任何帮助都会很棒!!我的脑袋炒了这个
由于
答案 0 :(得分:1)
假设图像的路径在src属性中是相对的,您需要计算出URL,然后运行类似于本答案中概述的测试:
Test to see if an image exists in C#
如果你真的需要检查图像是否存在并且已经部署(我会怀疑这是否是一个值得考虑的测试),你可以使用类似下面的代码:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://full-path-to-your-image.png");
request.Method = "HEAD";
bool exists;
try
{
request.GetResponse();
exists = true;
}
catch
{
exists = false;
}
它基本上检查URL(您的案例中的图像),以查看图像是否存在。
如果你需要一只手转过来问问;)
答案 1 :(得分:1)
我的解决方案是检查文件的长度。 您可以根据需要修改此解决方案:
/// <summary>
/// Gets the file lenght from location.
/// </summary>
/// <param name="location">The location where file location sould be located.</param>
/// <returns>Lenght of the content</returns>
public int GetFileLenghtFromUrlLocation(string location)
{
int len = 0;
int timeoutInSeconds = 5;
// paranoid check for null value
if (string.IsNullOrEmpty(location)) return 0;
// Create a web request to the URL
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(location);
myRequest.Timeout = timeoutInSeconds * 1000;
myRequest.AddRange(1024);
try
{
// Get the web response
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
// Make sure the response is valid
if (HttpStatusCode.OK == myResponse.StatusCode)
{
// Open the response stream
using (Stream myResponseStream = myResponse.GetResponseStream())
{
if (myResponseStream == null) return 0;
using (StreamReader rdr = new StreamReader(myResponseStream))
{
len = rdr.ReadToEnd().Length;
}
}
}
}
catch (Exception err)
{
throw new Exception("Error saving file from URL:" + err.Message, err);
}
return len;
}
答案 2 :(得分:0)
你不能这样做,至少不能单独使用Selenium。根据您正在测试的浏览器,您可以查看磁盘上的浏览器缓存并找到该文件,但并非所有浏览器都将所有内容缓存到磁盘,并且找出文件名可能非常困难。
当然,没有Selenium,你可以使用curl,wget等。下载图像文件,或者您可以屏幕截图浏览器并自己搜索“红色X盒”。但它们都不是很好的答案。