当前位置: 首页 > 知识库问答 >
问题:

隐式wait命令不工作-Selenium webdriver C#

宋建柏
2023-03-14

伙计们,我已经开始工作的硒网络驱动程序。你可以假设我是个初学者。目前,我在代码(C#)中实现隐式wait命令时遇到了困难。它没有正常工作,并且由于没有找到元素而导致一个异常,但是当我添加“Thread.Sleep(3000)”时,代码得到了完美无缺的执行。我一直在互联网上寻找解决方案,但是无法解决问题。下面我提到了示例代码。

class Entrypoint
{

static void Main()

{
 IWebDriver driver = new ChromeDriver();
    **driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);**
    driver.Navigate().GoToUrl("https://r1.netrevelation.com:8443/mcba-cms/pages/flight-transfer.cab");
    driver.Manage().Window.Maximize();


    driver.FindElement(By.Id("loginlink")).Click();
    driver.FindElement(By.Id("headerSubView:inputUserName:input")).SendKeys("st001");
    driver.FindElement(By.Id("headerSubView:inputPassword:input")).SendKeys("hello321" + Keys.Enter);

    driver.FindElement(By.Id("dateOfFlight:input")).Click();**//This Step does not get Executed , it throws exception element not found.**
    driver.FindElement(By.Id("ui-datepicker-div")).Click(); 
    driver.FindElement(By.XPath(".//*[@id='ui-datepicker-div']/div/a[2]/span")).Click(); 
    driver.FindElement(By.LinkText("28")).Click(); 
    IWebElement Flightno = driver.FindElement(By.Id("selectedFlight:input"));
    Flightno.SendKeys("BA901" + Keys.Enter);
    IWebElement Flighttick = driver.FindElement(By.Id("flightTickImg"));


    driver.Quit();

请注意,目前我不想使用显式等待,因为隐式将满足我的需要(如果它开始工作的话)。上面的代码以超音速运行,因为它设法登录到系统中,但后来每次都失败,原因是一旦登录请求发出,系统暂停2-3秒。请就此发表意见。

共有1个答案

司寇瑾瑜
2023-03-14

根据文档,隐含的等待是告诉WebDriver在尝试查找元素()查找所有元素()轮询HTML DOM,如果它们不能立即可用。但是DOM树中元素的可用性并不能保证ElementToBeClickable,就像您在代码块中所尝试的那样。因此,您将面临exception作为找不到元素。

因此,您的问题的解决方案是引入显式等待,即WebDriverWait和ExpectedConditions子句作为ElementToBeClickable,这不仅可以确认HTML DOM中元素的可用性,还可以确保该元素是可单击的,即显示和启用元素,如下所示:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("loginlink")));
 类似资料:
  • 我已经下载了jdk 1.8.0\u 131 当我打开命令提示符并编写以下命令-java-version时,它会给出输出 但是当我编写以下命令时:javac-version它会给我输出 我已经编辑了系统变量路径-C:\Progra~1\Java\jdk1.8.0_131\bin; 当我执行以下命令时:"C:\Program Files\Java\jdk1.8.0_131\bin\javac"-ver

  • 我正在测试一个页面,上面有一堆有单选按钮答案的问题。当您选择答案时,Javascript可能会启用/禁用页面上的某些问题。 问题似乎是Selenium“点击得太快”,没有等待Javascript完成。我尝试过用两种方法解决这个问题--显式等待解决了这个问题。具体地说,这是可行的,并解决了我的问题: 但是,我更愿意使用一个隐式等待,而不是这样。我的web驱动程序配置如下:

  • 我面临commandButton的问题,它只有在类型为submit时才起作用。有没有人可以看一下,让我知道是否有解决办法?下面的代码非常简单,并有足够的建议来说明我需要什么。方法test()未执行。方法runSubmit已成功执行。 我需要测试方法在没有提交的情况下执行,因为原始页面确实在提交期间执行了验证,test()方法必须在没有提交的情况下执行,因为这是提交之前的一个初步操作。 我正在使用P

  • 我已经写了一个脚本,在我的Ubuntu发行版上作为自动点击器工作。点击工作,但'sleep‘命令似乎不能正常工作。如果我取出click并从terminal运行它,那么sleeps将按预期工作。但是当我将它绑定到一个快捷方式并且在玩游戏的时候运行它的时候,它并没有Hibernate,看起来它只是一直点击。 最重要的Hibernate是break_intervalHibernate,因为它将高压灭菌器

  • 问题内容: 只要我通过Linux终端(bash shell)使用它,我的anaconda(4.5.4)都可以正常工作。但是,在bash脚本中运行conda命令根本不起作用。 脚本test.sh包含以下几行: 现在,运行会导致错误 如推荐给anaconda版本> 4.4,我的.bashrc不包含 但 谢谢。 问题答案: 由于@darthbith的评论,我解决了这个问题。 由于是bash函数,并且ba

  • 我使用NetBeans8.2创建了一个非常简单的Hello World程序。但是,当我尝试在Linux中使用命令行执行jar文件时 如果你需要更多的信息,请告诉我。 谢了。