有一些简单的代码,等待下拉列表显示在页面上:
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
在display:
上none
更改此元素的搜索字段样式属性block
之后。
我在父元素中也看不到任何东西,这个元素看不见什么。我实际上并不明白我做错了什么。
我需要点击此下拉列表中的项目,现在我只能在this.driver.sleep(some ms)
之后执行此操作。但这是不好的做法,我想要了解我在使用wait
方法时做错了什么并仍然使用它。 TY。
答案 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,但在这种情况下,有必要写出两个期望的表达式。如果有人能向我解释,我将不胜感激。