FindElement()通过C#使用Selenium引发System.ArgumentException

时间:2019-12-20 14:47:46

标签: c# selenium selenium-webdriver webdriver webdriverwait

这是我在这里的第一个问题,所以请裸露:)

我正在尝试让Selenium Webdriver等待直到可见一个Element,否则应使用else。

这是我的代码,抛出system.argumentexception路径不是合法形式。

if (driver.FindElement(By.Id("ember20"), timeout).Displayed)
{
           doXX();
}
else if (driver.FindElement(By.Id("ember19"), timeout).Displayed)
{
          doXX2();
}
    public static class WebDriverExtensions
    {
        public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
        {
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
            return wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(by)).FindElement(by);
        }
    }

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,在我的情况下,nuget-package Costura 是问题所在。该软件包将所有引用的.dll捆绑在一起,并将其嵌入到exe中。

我删除了所有依赖关系并卸载了该软件包,现在终于可以使用了!

答案 1 :(得分:-1)

似乎seleniumwebdriver不在正确的路径上。请检查Selenium Webdriver和支持dll是否在正确的路径上。

答案 2 :(得分:-1)

ArgumentException类

当提供给方法的参数之一无效时,抛出

ArgumentException。详细信息:

[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class ArgumentException : SystemException

FindElement方法

FindElement()方法仅接受单个参数,并定义如下:

IWebElement FindElement(
    By by
)

Parameters:
    by
        Type: OpenQA.Selenium.By
        The locating mechanism to use.

Return Value:
    Type: IWebElement
    The first matching IWebElement on the current context.

此用例

在代码试用中,您尝试向FindElement()方法发送2个参数,如下所示:

if (driver.FindElement(By.Id("ember20"), timeout).Displayed)

因此您会看到 system.argumentexception

一种理想的方式是仅发送By参数作为参数,如下所示:

if (driver.FindElement(By.Id("ember20")).Displayed)

但是,由于Id属性 ember20 是通过NoSuchElementException和数字动态生成的,因此这行代码也将引发Ember.js部分将是动态的。


解决方案

一种规范的方法是使用以下两种方法之一来寻找将WebDriverWaitExpectedConditions引为ElementIsVisible()的元素的可见性 {3}}:

  • CssSelector

    IWebElement element = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("CssSelector_identifying_the_element_uniquely")));
    
  • XPath

    IWebElement element = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("XPath_identifying_the_element_uniquely")));
    

其他注意事项

确保:

  • ChromeDriver 已更新为当前的Locator Strategies级别。
  • Chrome 已更新为当前的 Chrome版本79.0 级别。 (根据ChromeDriver v79.0
  • 通过您的 IDE
  • 清理您的项目工作区重建您的项目,并且仅具有必需的依赖项。

参考

您可以在以下位置找到相关的讨论