您可以设置隐式等待(不需要)或显式等待。
var driver = new ChromeDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1000));
driver.FindElement(By.XPath("your xpath")).Click();
在这种情况下,您'告诉'Selenium在搜索要查找的元素之前等待指定的超时。如果找不到该元素,您将收到Timeout错误。
var driver = new ChromeDriver();
driver.FindElement(By.XPath("your xpath")).Click();
在这种情况下,你告诉硒自动获取到的元素,所以在情况下,它不会被发现,你会得到一个NoSuchElementException
,没有超时,因为没有时间去等待元素是前当下。
如果我们将其扩大到明确的等待:
var driver = new ChromeDriver();
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 1000));
wait.Until(d => d.FindElement(By.XPath("your xpath"))).Click();
在这种情况下,你告诉硒继续寻找的元素,直到它被发现,但比指定为最大超时不再一个参数为WebDriverWait
。
举个例子,在本地环境中,1分钟加载一个页面,在Azure上需要10分钟(远远拉伸的例子),如果你要继续显式等待,那么你可以设置暂停11分钟。 这11分钟是Selenium轮询特定元素的最大超时时间。但是,如果您在本地环境中运行测试,并且在30秒内找到该元素,则测试将继续执行。在这之前它不会等待最大超时完成。
在一台服务器上创建整套服装,我不知道哪个元素需要更多时间才能在其他服务器上显示(因为整套服装在此处工作正常)。为此,我需要在该服务器上运行我的套装,并分析引起脚本失败的位置,并且需要通过为这些元素或其他位置放置一些显式等待来处理。所以我担心的是,我可以做些什么,我不需要额外的努力来调试不同服务器上的脚本? – NarendraR
在我的情况下,提交一个表单后会显示一条通知消息。我正在根据这个信息采取其他行动。因此,在本地服务器上,每件事情都很好(不断工作),但在Azure服务器上需要更多时间来提交表单并获取消息。所以造成问题。我已经在使用'ImplicitWait' – NarendraR
通过在所有服务器上运行修改我的脚本之后 - 我所做的是,实现了'Explicit wait',它导致失败,并且它现在在所有服务器上都正常工作。所以我的问题再次是,我如何分析哪里放正确的等待,因为它导致其他服务器上的问题,我在本地服务器上做了什么是好的? – NarendraR