如何检查c#Selenium驱动程序中是否存在Element

Pro*_*szz 19 c# selenium

所以我使用Firefox selenium webdriers获得了这个c#winform.

基本上我需要它来检查一个元素是否存在以及它是否没有点击另一个元素.如果有视频并且在观看之后它变为W_VIEWED

这是我到目前为止所得到的

driver.FindElement(By.XPath("//div[@class='video']/a")).Click();
else {
          driver.FindElement(By.XPath("//div[@class='W_VIEWED']/a")).Click();
     }
Run Code Online (Sandbox Code Playgroud)

错误3只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句242

一种新的c#selenium.谢谢你的帮助.

Pra*_*ari 33

您可以检查元素退出或不使用

bool isElementDisplayed = driver.findElement(By.xpath("element")).isDisplayed()
Run Code Online (Sandbox Code Playgroud)

请记住,findElement如果找不到元素则抛出异常,因此您需要正确处理它.

在我的一个应用程序中,我通过检查单独函数中的元素来处理异常,

    private bool IsElementPresent(By by)
    {
        try
        {
            driver.FindElement(by);
            return true;
        }
        catch (NoSuchElementException)
        {
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

通话功能,

            if (IsElementPresent(By.Id("element name")))
            {
                //do if exists
            }
            else
            {
                //do if does not exists
            }
Run Code Online (Sandbox Code Playgroud)

  • 不要从字面上理解,你应该能够根据你的代码结构更改代码.我不是在创建新的`驱动程序`我只是在程序的其他部分使用它.再次写"IWebDriver"没有意义. (2认同)
  • @Programerszz你面前有代码,你看到它不起作用的原因吗?请理解,你需要使用你的`driver`,而不是再次创建.您没有资格聊天,否则我可以聊天并尝试解决您的问题.这个评论在StackOverlow上并不好. (2认同)
  • 尽量不要让异常发生在你的代码中,因为这会带来很大的成本。而是使用类似这样的 `int result = driver.FindElements(By.XPath("//input[@id=\'user_email\']")).Count; if(结果 > 0) { //做某事 } ` (2认同)

小智 18

您可以使用带有"s"的FindElements来确定它是否存在,因为FindElement会导致异常.如果FindElements未返回元素,则返回空列表.

List<IWebElement> elementList = new List<IWebElement>();
elementList.AddRange(driver.FindElements(By.XPath("//input[@att='something']")));

if(elementList.Count > 0)
{
 //If the count is greater than 0 your element exists.
   elementList[0].Click();
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是国际海事组织接受的答案 - 应尽可能避免异常,这个解决方案为我们提供了一种方法来做到这一点。谢谢! (2认同)

小智 7

所以我最近想出了另一种方法,这种方式更快.如果您的元素具有唯一ID或某个属性,该属性不存在于页面上的其他位置,则可以检查PageSource.

driver.PageSource.Contains("UniqueID");
Run Code Online (Sandbox Code Playgroud)

它会检查页面以查看是否存在ID或其他唯一文本.这种情况几乎是瞬间发生的,而不是使用需要约20秒的Try/Catch语句.FindElements也需要很长时间才能运行.

  • 如果您使用隐式等待(类似于`driver.Manage().Timeouts().隐式等待(...)`代码中的任何地方),这只会更快,这在硒向导中似乎通常是不鼓励的.如果你从未设置过隐式等待,那么`FindElement/s`将立即返回. (2认同)