Selenium Webdriver/C#-单击后如何确认页面加载?
我试图调用的网站基本上使用.ascx和aspx页面来呈现它们的项目。为了导航,您必须使用click事件,而不是goto url。目前我正在使用Thread.Sleep(3000),但这太笨重了,我认为这不是最好的方法 为了确保页面已从单击事件加载,您可以添加哪些内容Selenium Webdriver/C#-单击后如何确认页面加载?,c#,selenium,C#,Selenium,我试图调用的网站基本上使用.ascx和aspx页面来呈现它们的项目。为了导航,您必须使用click事件,而不是goto url。目前我正在使用Thread.Sleep(3000),但这太笨重了,我认为这不是最好的方法 为了确保页面已从单击事件加载,您可以添加哪些内容 IWebElement myLink; myLink = driver.FindElement(By.Id("ctl00_ctl00_cphContentArea_cphContentArea_ucwaag_lnkbtnDate"
IWebElement myLink;
myLink = driver.FindElement(By.Id("ctl00_ctl00_cphContentArea_cphContentArea_ucwaag_lnkbtnDate" + i.ToString()));
myLink.Click();
Thread.Sleep(5000); //yeah need to fix this
我不确定这是否是一种方法,但我使用的是等待
javascript
变量设置的池机制,在页面完全加载时手动设置该变量(因为无法判断实际何时设置)
C#
等待目标页面上的已知元素出现是最好的选择——引入任何sleep语句都会使测试变得非常脆弱,因此您应该尽量避免这种情况 比如说:
wait.Until(d => d.FindElement(By.Id(someId)));
在这种情况下,您可能会发现这很有用。这与我们在尝试使用硒时面临的问题完全相同 我们通过使用等待条件解决了这个问题
wait.Until(ExpectedConditions.ElementExists(locator));
wait.Until(ExpectedConditions.ElementIsVisible(locator));
我们必须同时使用ElementExists和ElementIsVisible来解决控件在页面上但还不可见的问题我唯一不喜欢的是,你必须知道下一页上的每个ID,你只需要知道页面上一个元素的ID或xpath,因为你正在编写一个测试,期望这个页面应该是一个给定的页面——我知道,但是如果有1000个页面需要抓取,那么我需要1000个ID。你是在写测试还是在用Selenium做完全不同的事情?您可能认为您至少可以找到所有这些页面共有的一个元素,例如容器
div
elementI试图使用Selenium来刮取使用javascript导航的aspx页面-如果每个页面上都没有您知道的id怎么办?意思是,如果有1000页,我不想找1000页ids@Mike在那种情况下,这可能不起作用。当我们这样做的时候,它总是页面上的一个已知元素Mike-你的示例很简单,我只是不知道如何实际使用它。什么是定位器?我知道我要找的那个部门的身份
wait.Until(d => d.FindElement(By.Id(someId)));
wait.Until(ExpectedConditions.ElementExists(locator));
wait.Until(ExpectedConditions.ElementIsVisible(locator));