Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SeleniumWebDriver下测试页面上的元素是否为#_C#_Selenium Webdriver - Fatal编程技术网

C# 如何在SeleniumWebDriver下测试页面上的元素是否为#

C# 如何在SeleniumWebDriver下测试页面上的元素是否为#,c#,selenium-webdriver,C#,Selenium Webdriver,我在数不清的网页上搜索,并没有得到一个很好的答案。我正在使用C#使用Selenium 2.30 我试过了 if (browser.FindElement(By.XPath("xpath")).Displayed) 我试过了 if (browser.FindElements(By.XPath("xpath")).Count !=0) 而且 IWebElement element = browser.FindElement(By.XPath("xpath")); if (element.Disp

我在数不清的网页上搜索,并没有得到一个很好的答案。我正在使用C#使用Selenium 2.30

我试过了

if (browser.FindElement(By.XPath("xpath")).Displayed)
我试过了

if (browser.FindElements(By.XPath("xpath")).Count !=0)
而且

IWebElement element = browser.FindElement(By.XPath("xpath"));
if (element.Displayed == true)
它们只在元素存在时工作,如果不存在,它将拉出异常。但这不是必须的例外,我在另一个{}语句中有一些东西来处理它,我不希望webdriver在第一点就阻止我

我现在正在做的是

IWebElement element = null;
try
{
   element = browser.FindElement(By.XPath("xpath"));
}
catch
{

}
if (element != null)

到目前为止,这种方法是有效的,但我认为这不是最好的解决方案。如果有人能给我一个更好的方法,我将不胜感激。

您这样做是可以接受的,但有时您会在执行之前的操作(例如导航到页面)后尝试运行此操作,通常最好给出一个超时值并使用以下WebDriverWait方法:

WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 0, timeout));
element = _wait.Until(x => x.FindElement(By.XPath(searchAttribute.attributeValue)));

这允许您等待元素出现在页面上,直到超时值为止(我在应用程序I测试中使用5秒)。但是,简单地说,如果(element==null)没有找到,您可以使用
的代码。如果使用WebDriverWait,如果不希望在超时后引发异常,则必须捕获异常。

可以接受您的操作方式,但有时您会在执行之前的操作(例如导航到页面)后尝试运行此操作通常最好给出一个超时值,并使用以下WebDriverWait方法:

WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 0, timeout));
element = _wait.Until(x => x.FindElement(By.XPath(searchAttribute.attributeValue)));

这允许您等待元素出现在页面上,直到超时值为止(我在应用程序I测试中使用5秒)。但是,简单地说,如果(element==null)
没有找到,您可以使用
的代码。如果使用WebDriverWait,如果不希望在超时后引发异常,则必须捕获异常。

如果使用显式等待,还可以查看预封装的预期条件列表:感谢Nashibukasan。也许这是一个愚蠢的问题,但是WebDriverWait和隐式Wait之间有什么区别?另一个问题是,为什么我不能使用if(browser.FindElements(By.XPath(“XPath”)).Count!=0)
隐式Wait
是一个设置为用于所有后续
WebElement
搜索的超时
WebDriverWait
可以传递不同的超时值,并可用于不同的
预期条件
。我相信你可以用你的
Count!=0
code,但是您仍然可以从使用其中一个等待中获益,否则,如果元素尚未加载,您将发现它很快返回0计数。我遇到了一个类似“WebDriver.dll中发生了类型为“OpenQA.Selenium.WebDriverException”的未处理异常”的异常。其他信息:使用.Count!时,对URL“”的远程WebDriver服务器的HTTP请求在60秒后超时0如果使用显式等待,还可以查看预先设定的预期条件列表:谢谢Nashibukasan。也许这是一个愚蠢的问题,但是WebDriverWait和隐式Wait之间有什么区别?另一个问题是,为什么我不能使用if(browser.FindElements(By.XPath(“XPath”)).Count!=0)
隐式Wait
是一个设置为用于所有后续
WebElement
搜索的超时
WebDriverWait
可以传递不同的超时值,并可用于不同的
预期条件
。我相信你可以用你的
Count!=0
code,但是您仍然可以从使用其中一个等待中获益,否则,如果元素尚未加载,您将发现它很快返回0计数。我遇到了一个类似“WebDriver.dll中发生了类型为“OpenQA.Selenium.WebDriverException”的未处理异常”的异常。其他信息:使用.Count!时,对URL“”的远程WebDriver服务器的HTTP请求在60秒后超时0