OpenQA.Selenium.NoSuchElementException

时间:2017-06-15 16:05:29

标签: c# selenium exception nosuchelementexception

class Program
{
    static void Main(string[] args)
    {
        IWebDriver driver = new ChromeDriver();

        //Dev environment
        driver.Url = /*URL*/;

        var trialGroupName = driver.FindElement(By.Name("TrialGroupName")); 
        trialGroupName.SendKeys(/*trial group name */);

        var userName = driver.FindElement(By.Name("UserName"));
        userName.SendKeys(/*username*/);

        var password = driver.FindElement(By.Name("UserPassword"));
        password.SendKeys(/*password*/);

        var loginButton = driver.FindElement(By.Id("Ok"));
        loginButton.Click();

        //Find and click on Browse tab
        var browseTab = driver.FindElement(By.Id("17"));
        browseTab.Click();
    }
}
  

OpenQA.Selenium.NoSuchElementException:'没有这样的元素:无法找到元素:{“method”:“id”,“selector”:“17”}     (会议信息:chrome = 58.0.3029.110)     (驱动程序信息:chromedriver = 2.30.477700(0057494ad8732195794a7b32078424f92a5fce41),platform = Windows NT 6.1.7601 SP1 x86_64)'

这是检查信息:

<td>
<a id="17" class="defaultMenu initMenu" href="javascript:onMenuHref(17)" notran="">Browse</a>
</td>

我也试过用XPath运行它(Chrome的短版本和FireBug的长版本)我收到同样的错误。我尝试添加一个隐式等待和一个Thread.Sleep()但仍然收到相同的错误。还尝试从一个不同的字段开始并标签到它然后它给了我相同的例外,但在新的领域。今天早上我也尝试过使用cssSelector,也无法让它工作。我确实试着做一个明确的等待,但我会说实话,我仍然试图消化并理解它,因为等待是一个新概念,我不完全理解它,所以我不认为我在做没错。

我是初学者,我目前正在尝试编写脚本以将其转移到需要测试的实际页面。我一直在教自己一些编码和硒,因为我现在是我公司唯一的QA人员,我真的认为我们可以从自动化中受益。页面的这一部分实际上并不是由我们编程的,它由托管我们使用的系统的第三方完成,因此我仅限于在检查中看到的内容。

(我注释了用户登录信息和URL,因为它仅供内部使用,无论如何都无法访问我们系统之外的页面。而且我很确定我不允许这样做。雇主)。

我将非常感谢您提供的任何帮助,或者我可以使用的任何其他资源。我一直在使用谷歌,所以可能有其他你知道的页面可以帮助我,我还没有找到。

1 个答案:

答案 0 :(得分:3)

登录按钮将您带到一个新页面,您需要等待它加载。尝试使用explicit wait等待标签可点击。在以下示例中,超时为10秒,因此请根据需要进行修改。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement browseTab = wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("17")));