我编写了一个包含5秒隐式等待的测试。我一直在寻找向代码中引入显式等待的方法,这样执行就不会花很长时间。
我已经看到有很多不同的方法可以将显式方式引入代码。我将如何进行如下操作,但我不确定对我来说正确的方法
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>(d => d.FindElement(By.Id("someDynamicElement")));
}
/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Interactions;
using System.Threading;
namespace Exercise1
{
class Program
{
static void Main(string[] args)
{
IWebDriver webDriver = new ChromeDriver();
webDriver.Navigate().GoToUrl("http://www.asos.com/men/");
webDriver.Manage().Window.Maximize();
webDriver.FindElement(By.XPath(".//button[@data-testid='country-selector-btn']")).Click();
webDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
IWebElement country = webDriver.FindElement(By.Id("country"));
SelectElementFromDropDown(country, "India");
webDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
IWebElement currency = webDriver.FindElement(By.Id("currency"));
SelectElementFromDropDown(currency, "$ USD");
webDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
webDriver.FindElement(By.XPath(".//button[@data-testid='save-country-button']")).Click();
webDriver.Quit();
}
private static void SelectElementFromDropDown(IWebElement ele, string text)
{
SelectElement select = new SelectElement(ele);
select.SelectByText(text);
}
}
}
答案 0 :(得分:0)
您误解了ImplicitWait
的工作方式。您一直在打电话,就像您希望它每次等待5秒一样。 ImplicitWait
超时在驱动程序的生命周期内设置一次。如果要删除所有设置超时的实例(第一个实例除外),则脚本将完全相同。
在进入显式等待之前的快速注释... Selenium文档state not to mix them。
警告:请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。
对于显式等待,您将等待特定的东西……元素存在,可见,可点击等。您可以查看WebDriverWait和{{ 3}}。
一个简单的例子
// create a new instance of WebDriverWait that can be reused
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
IWebElement button = wait.Until(ExpectedConditions.ElementExists(By.Id("someId"));
// do something with button
ExpectedConditions
中已经存在很多可以等待的不同条件,因此请确保您熟悉它们。通常,您很少需要那里没有提供的东西,因此请在编写自定义条件之前进行检查。