我不熟悉使用selenium Webdriver
并撰写c#
。我在脚本中使用了很多thread.sleep()
命令来确保Selenium没有尝试点击太快。通过大量的研究,我发现这是不受欢迎的,并且有更好的"方法,所以我开始使用: -
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId")));
等待在另一个类中定义为: -
wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10));
我只能在没有得到的情况下运行脚本2/10次才能工作:
没有这样的元素异常:找不到元素......
我已经停止使用thread.sleep
了很多这个问题的例子。经过大量的研究后,我总是发现这是建议的方式,但似乎完全不可靠。我错过了什么吗?该元素在2秒后始终存在,并且在10秒过去之前发生错误。我已经阅读了至少10篇其他听起来相似的帖子,但没有一个有解决方案有效......除了Thread.Sleep(5000)
!
答案 0 :(得分:2)
尝试在创建服务器后将NoSuchElementException类型添加到服务器的IgnoreExceptionTypes。
public partial class Form2 : Form
{
Form1 Form_1;
public Form2()
{
InitializeComponent();
Form_1 = Application.OpenForms["Form1"] as Form1;
}
private void BookSetupForm_Load(object sender, EventArgs e)
{
// access here your transfer object
this.comboBox1.DataSource = Form_1.comboTransfer.Items;
}
}
一般情况下,如果服务员在超时之前返回您指示已过期,那是因为发生了当前未被忽略的异常。
WebDriverWait类派生自DefaultWait类。您可以在github上查看这两个内容,我发现这对理解如何使用它非常有帮助。