gpt4 book ai didi

c# - Selenium C#超时异常

转载 作者:行者123 更新时间:2023-12-04 17:55:05 25 4
gpt4 key购买 nike

当 Selenium (Xpath) 无法处理元素时,我开始编写自动测试并遇到 Selenium 超时错误

private void CheckLogin(IWebDriver driver)
{
var driver = new ChromeDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000));
driver.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']")).Click();
var element = driver.FindElement(By.XPath(".//*/span[contains(text(),'code')]"));
if (element != null && dealer.Displayed)
{
System.Diagnostics.Debug.WriteLine("Element is shown");
}
else
{
System.Diagnostics.Debug.WriteLine("Element is not shown");
driver.FindElement(By.XPath(".//*[@id='s2id_autogen5']/a")).Click();
driver.FindElement(By.XPath(".//*[@id='body']/a")).Click();
driver.FindElement(By.XPath(".//*[@id='s2id_autogen6_search']")).SendKeys(ENTER);
}

}

因此,当找到 block if{} 中的元素时(文本包含值“代码”),它工作正常,但是当它没有找到时(文本不包含值“代码”),系统发送超时错误,我尝试使用 try/catch 结构但没有帮助。ChromeDriver() 和 FirefoxDriver() 存在同样的问题。

异常(exception):

OpenQA.Selenium.WebDriverException occurred
HResult=0x80131500
Message=The HTTP request to the remote WebDriver server for URL http://localhost:56939/session/ timed out after 60 seconds.
Source=WebDriver
StackTrace:
at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElementByXPath(String xpath)
at OpenQA.Selenium.By.<>c__DisplayClasse.<XPath>b__c(ISearchContext context)
at OpenQA.Selenium.By.FindElement(ISearchContext context)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)

最佳答案

您收到超时错误是因为您添加了隐式等待。让我们以您的示例为例:

var driver = new ChromeDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000));
driver.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']")).Click();

在这种情况下,您“告诉”Selenium 在搜索您想要找到的元素之前等待指定的超时。如果未找到该元素,您将收到超时错误。

var driver = new ChromeDriver();
driver.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']")).Click();

在这种情况下,您要告诉 Selenium 自动获取元素,因此万一找不到它,您将得到一个 NoSuchElementException,没有超时,因为没有时间等待元素存在。

如果我们将其扩展到显式等待:

var driver = new ChromeDriver();
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 1000));
wait.Until(d => d.FindElement(By.XPath(".//div[@class='modal fade in']//button[text()='Close']"))).Click();

在这种情况下,您要告诉 Selenium 继续搜索该元素,直到找到它但不超过指定为 WebDriverWait 参数的最大超时时间。

关于c# - Selenium C#超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40976258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com