C#和#x2B;硒:自动化等等

C#和#x2B;硒:自动化等等,c#,selenium,wait,explicit,C#,Selenium,Wait,Explicit,下面的代码不起作用,它在第2行总是不会抛出这样的元素异常 wait.IgnoreExceptionTypes(typeof(NoSuchElementException)); wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(element))); 这里可能有两个问题: 您试图在元素可见之前找到该元素,因此可以通过执行以下操作等待该元素 wait.Until(ExpectedConditions.ElementE

下面的代码不起作用,它在第2行总是不会抛出这样的元素异常

wait.IgnoreExceptionTypes(typeof(NoSuchElementException));      
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(element)));

这里可能有两个问题:

  • 您试图在元素可见之前找到该元素,因此可以通过执行以下操作等待该元素

    wait.Until(ExpectedConditions.ElementExists(By.XPath(element)));
    
    其中element是您试图查找的元素的XPath

  • 您没有使用正确的XPath找到元素。如果您使用的是绝对XPath,请避免这样做,因为虽然绝对XPath可以更快地找到元素,但如果DOM结构发生更改,您的路径可能不再有效


  • 这里可能有两个问题:

  • 您试图在元素可见之前找到该元素,因此可以通过执行以下操作等待该元素

    wait.Until(ExpectedConditions.ElementExists(By.XPath(element)));
    
    其中element是您试图查找的元素的XPath

  • 您没有使用正确的XPath找到元素。如果您使用的是绝对XPath,请避免这样做,因为虽然绝对XPath可以更快地找到元素,但如果DOM结构发生更改,您的路径可能不再有效


  • 也有可能您没有全屏运行浏览器,至少这是我当前项目的GUI更改时面临的一个有效问题。添加
    driver.Manage().Window.Maximize()我的分类初始化一时兴起解决了这个问题


    另一种选择是,您的元素可能嵌入到iframe中,或者被iframe重叠。

    也可能您没有全屏运行浏览器,至少这是我当前项目的GUI更改时面临的一个有效问题。添加
    driver.Manage().Window.Maximize()我的分类初始化一时兴起解决了这个问题


    另一种选择是,您的元素可能嵌入到iframe中,或者被一个iframe重叠。

    如本答案中所述,我已经解决了一个类似的问题:

    IWebElement-button=driver.FindElement(By.ClassName(“传输按钮”);
    IJavaScriptExecutor executor=(IJavaScriptExecutor)驱动程序;
    executor.ExecuteScript(“参数[0]。单击();”,按钮)


    当然,需要对其进行编辑,以便通过正确的选择器找到您的元素。

    如本答案中所述,我已解决了以下类似问题:

    IWebElement-button=driver.FindElement(By.ClassName(“传输按钮”);
    IJavaScriptExecutor executor=(IJavaScriptExecutor)驱动程序;
    executor.ExecuteScript(“参数[0]。单击();”,按钮)


    当然,需要对其进行编辑,才能通过正确的选择器找到您的元素。

    什么是元素?什么是元素?1。我尝试了这个语句,但仍然是相同的问题,wait.Until(ExpectedConditions.ElementExists(By.XPath(element));2.如果我使用Thread.Sleep(TimeSpan.FromSeconds(4)),我相信我使用的xpath是正确的;它工作正常。错误消息“org.openqa.selenium.WebDriverException:元素在点(411675)处不可单击。其他元素将收到单击:…”因此,这里的问题是您尝试单击的元素上存在覆盖。解决此问题的一种方法是使用Action Ex:actions Action=newactions(webdriver)创建一个新的actions对象;然后执行action.MoveToElement(元素)。单击().Perform();当元素上有隐藏的重叠时,会发生此异常。@vignesh尝试等待重叠元素不可见。我发现在这样的情况下也会起作用。我尝试了这个语句,但仍然是相同的问题,wait.Until(ExpectedConditions.ElementExists(By.XPath(element));2.如果我使用Thread.Sleep(TimeSpan.FromSeconds(4)),我相信我使用的xpath是正确的;它工作正常。错误消息“org.openqa.selenium.WebDriverException:元素在点(411675)处不可单击。其他元素将收到单击:…”因此,这里的问题是您尝试单击的元素上存在覆盖。解决此问题的一种方法是使用Action Ex:actions Action=newactions(webdriver)创建一个新的actions对象;然后执行action.MoveToElement(元素)。单击().Perform();当元素上有隐藏的重叠时,会发生此异常。@vignesh尝试等待重叠元素不可见。我发现,在这种情况下,这也会起作用