为什么isElementPresent不起作用?

时间:2016-08-05 06:01:36

标签: javascript selenium-webdriver

有一些简单的代码,等待下拉列表显示在页面上:

var By = this.webdriver.By;
var driver = this.driver;
var bySelector = By.xpath('//*[@id="searchForm"]//*[@class="autocomplete-suggestions autocomplete-suggestion-withgroup"]');
return driver.wait(() => {
    driver.isElementPresent(bySelector);
    }, 6000)
    .then((bool) => {
        assert.isTrue(bool);
    });

此代码向我显示错误消息:Error: Wait timed out after 6011ms

有一个元素属性: here

display:none更改此元素的搜索字段样式属性block之后。 我在父元素中也看不到任何东西,这个元素看不见什么。我实际上并不明白我做错了什么。

我需要点击此下拉列表中的项目,现在我只能在this.driver.sleep(some ms)之后执行此操作。但这是不好的做法,我想要了解我在使用wait方法时做错了什么并仍然使用它。 TY。

2 个答案:

答案 0 :(得分:0)

我认为您使用的xpath是错误的。试试下面的xapth。

var bySelector = By.xpath('//*[@id="searchForm"]/descendant::*[@class="autocomplete-suggestions autocomplete-suggestion-withgroup"]');

答案 1 :(得分:0)

好的,一位同事帮我找到了解决这个问题的方法。 这是:

using (var connection = new MySqlConnection(csb.ConnectionString))
{
    connection.Open();
    using (var cmd = connection.CreateCommand())
    {
        cmd.CommandText = @"select 1;";
        using (var reader = await cmd.ExecuteReaderAsync().ConfigureAwait(false))
        {
            Assert.Equal(true, await reader.ReadAsync().ConfigureAwait(false));
            reader.Dispose();
        }
    }
}

事实上,我不明白为什么在某些情况下足够的isElementPresent,但在这种情况下,有必要写出两个期望的表达式。如果有人能向我解释,我将不胜感激。

相关问题