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

使用Webdriver使用Selenium进行超时的最佳方法是什么

厉念
2023-03-14

我遇到了一个问题。我的网页有一个DropDownList控件。DropDownList值更改后(通过选择不同的值),页面将刷新并呈现内容。

下面是我的代码:

[TestInitialize()]
public void Setup()
{
    if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.IE))
    {
        driver = new InternetExplorerDriver();
    }
    else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.CHROME))
    {
        //driver = new ChromeDriver();
    }
    else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.FIREFOX))
    {
        driver = new FirefoxDriver();
    }
}

第二部分:

[TestMethod]
public void testVerifyData()
{
    // ...................
    // ...................
    driver.FindElement(By.XPath("//*[@id='ctl00_NavigationControl1_lnke']")).Click();

    Thread.Sleep(2000);

    //select from the dropdownlist.
    IWebElement catagory = driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_Filter"));
    SelectElement selectCatagory = new SelectElement(catagory);
    selectCatagory.SelectByText("Employee");

    Thread.Sleep(2000);
    // ...................
    // ...................
}

共有1个答案

孔鸿哲
2023-03-14

thread.sleep()是一种非常不鼓励的实现等待的方法

selenium文档http://seleniumhq.org/docs/04_webdriver_advanced.html概述了这段代码

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement category = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id("ctl00_ContentPlaceHolder1_Filter"));
    });

这是一个显式wait的示例,其中selenium在找到元素之前不会执行任何操作

隐式等待的一个示例是:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
IWebElement category = driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_Filter"));

在隐式等待中,驱动程序将等待给定的时间量,并轮询DOM中不存在的任何元素。

编辑

public WaitForElement(string el_id)
{
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement category = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id(el_id));
    });
}
 类似资料:
  • 问题内容: 我碰到这个解决我最初的问题,这是模拟使用selenium的webdriver的Enter键或Return按键。 但是,在我的代码中,我严格只想使用两个vs中的一个。 这样做时的最佳实践是什么,因为在这两种方法都在大多数时间工作的情况下,对于使用enter或return似乎存在不同意见?在哪种情况下,一种或另一种都不起作用,总有一种会起作用? 问题答案: 从性能上来说,我在这两方面都没有

  • 尝试使用CompletionSuggester for autocomplete特性,通过Java的RestHighLevelClient实现CompletionSuggester有不同的方法,想知道以下这些方法之间(在性能/查询执行速度方面)有什么区别吗 1:使用CompletionSuggestionBuilder: 2:使用SimpleQueryString

  • 问题内容: 如何简单地从本地Python(3.0)脚本SSH到远程服务器,提供登录名/密码,执行命令并将输出打印到Python控制台? 我宁愿不使用任何大型外部库或在远程服务器上安装任何东西。 问题答案: 我没有尝试过,但是这个pysftp模块可能会有所帮助,而后者又使用了paramiko。我相信一切都在客户端。 有趣的命令可能是在远程计算机上执行任意命令。(该模块的功能和方法也更多地暗示了它的F

  • 问题内容: 所以,我要做的是在特定网页上运行一个函数(与我的正则表达式匹配)。 现在,我每秒检查一次,并且它可以正常工作,但是我敢肯定,有更好的方法(因为它使网站充斥着大量请求)。 我当时想以某种方式做到这一点,但不确定如何做到。 问题答案: 我当时想用WebDriverWait做到这一点 究竟。首先,查看内置的“预期条件”是否可以解决以下问题: 用法示例: 如果不是,则可以始终创建自定义的“预期

  • 问题内容: 我已经设计网站已有一段时间了,但是在使用PHP和HTML时我还不确定。像这样用PHP和HTML 编写整个文档是否更好: 或拥有一个类似HTML的文件,只需添加PHP: 似乎比HTML 整洁,尤其是在整个页面中使用大量PHP的情况下,但这样做会丢失HTML的所有格式,即IDE中的颜色等。 问题答案: 对此有不同的意见。我认为有两种好的方法: 使用像Smarty这样的模板引擎,它将代码和表

  • 问题内容: 我有一些代码遍历从数据库中查询出来的列表,并对该列表中的每个元素进行HTTP请求。该列表有时可能是一个相当大的数目(成千上万个),并且我想确保我不会遇到具有成千上万个并发HTTP请求的Web服务器。 该代码的缩写版本目前看起来像这样… 该代码在节点4.3.2上运行。重申一下,是否可以进行管理,以便在任何给定时间仅进行一定数量的承诺? 问题答案: 请注意,创建诺言本身不会触发诺言开始工作