我正在为我的网站建立一个测试框架,我想完全将框架从测试中分离出来,问题是当我写一个测试时,有时断言需要时间,直到它可以是真的,例如,如果我在上传文件页面,当文件上传时,网站应该显示文件上传成功页面,但它需要很长时间,直到浏览器到达这个页面
我应该如何强制断言在返回结果之前等待一段时间?
一些代码可能会解释我目前的工作方式:
上传页面类
Public class UploadPage
{
[FindsBy(How = How.Name, Using = "upload-button")]
public IWebElement BtnUpload { get; set; }
public UploadPage()
{
PageFactory.InitElements(Driver, this);
}
public void UploadFile(string path)
{
//select file
BtnUpload.Click();
}
}
成功上传页面:
Public class UploadSuccessfulPage
{
[FindsBy(How = How.Name, Using = "success-message")]
public IWebElement LblSuccessMessage{ get; set; }
public UploadSuccessfulPage()
{
PageFactory.InitElements(Driver, this);
}
public bool IsAt()
{
Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(60))
return Driver.url==configurations.UploadSuccessfulPageURL;
}
}
测试方法:
public void TestUpload()
{
UploadPage uploadPage= new UploadPage ();
uploadPage.UploadFile(path);
UploadSuccessfulPage successPage= new UploadSuccessfulPage();
Assert.IsTrue(successPage.IsAt());
}
当我以这种方式编写测试时,尽管IsAt()包含隐式等待,但断言不会等待
页(page的缩写)我不打算用线。睡眠();
方法布尔 IsAt()
应该按如下方式实现:
public bool IsAt()
{
Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(60));
try {
return driver.FindElement(By.Name("success-message").Displayed;
} catch (WebDriverException e) {
return false;
}
}
或者使用显式等待:
public bool IsAt()
{
try {
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until(ExpectedConditions.ElementIsVisible(By.Name("success-message")));
return true;
} catch (TimeoutException e){
return false;
}
}
更新:如果您想通过url进行验证,则<code>bool IsAt()
public bool IsAt()
{
try {
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until(ExpectedConditions.UrlToBe(configurations.UploadSuccessfulPageURL));
return true;
} catch (TimeoutException e){
return false;
}
}
查看ExpectedConditions类,找到适合您需求的条件
我对Selenium和Python是新手。我可以浏览网站,找到元素并打印出来,但速度很慢 Python版本:3.10;Selenium WebDrive:Firefox;IDE:PyCharm 2021.3.2(CE);操作系统:Fedora 35 VM 我试图打印的元素的HTML代码: 我的Python Selenium找到了大部分时间都能正常工作的代码(但当服务器需要很长时间才能响应时失败):
我正在尝试自动化基于共享点的应用程序,它有时会很慢。在下面的示例中,我试图将密码输入包装成显式等待。目前,Selenium以快速运行测试,导致无法执行操作。 如何将密码部分包装成硒显式方式?
问题内容: 是的,我知道这个问题经常被问到,但是我还是不明白。我想让Selenium等待,无论如何。我尝试了这些方法 和其他东西,但它不起作用。我需要selenium才能等待10秒。 NO 直到一些元素被加载或什么,只是等待10秒。我知道有这个 我不要那个 。 如果要花几秒钟(无法实现)等待selenium,那么其他(python)库/程序将能够完成此任务?使用Java Selenium似乎没有问
我有一个打开浏览器的ruby脚本。我把它设置为先打开Firefox,然后再打开Chrome,如果FF因为某种原因失败了,比如FF得到了更新,Selenium还没有赶上。 等待函数/定义对FF很好,但总是中断。以下是Chrome浏览器启动的相关代码: 我对Selenium还是相当陌生,我使用了等待。在声明如下内容后,直到命令: 以上代码行在Firefox中运行良好。但是,我想用FF和Chrome运行
问题内容: 我正在浏览一个Web应用程序,如果尝试单击某个元素之后才能与之交互,则该Web应用程序通常会引发错误。 使用Selenium WebDriver(java)时,我可以轻松解决此问题: 但是,我试图使用Selenium类型库在VBA中编写脚本,尽管尝试了许多不同的方法,但我唯一的成功是: 有人告诉我,应该尽可能避免这样做。如果有人可以建议如何将Java转换为VBA或提供任何其他解决方案,
问题内容: 我们正在将Selenium与Java API和一些Javascript用户扩展一起使用。我们在应用程序中使用了很多AJAX调用。我们的许多测试都是随机失败的,因为有时AJAX调用的完成速度比其他时间慢,因此页面未完全加载。我们通过等待特定元素或Thread.sleep来解决此问题。我试图找到一种方法来代替等待网络流量完成。这样我们就可以做到这一点: 这样,我们可以摆脱线程hiberna