Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium Webdriver/C#-单击后如何确认页面加载?_C#_Selenium - Fatal编程技术网

Selenium Webdriver/C#-单击后如何确认页面加载?

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"

我试图调用的网站基本上使用.ascx和aspx页面来呈现它们的项目。为了导航,您必须使用click事件,而不是goto url。目前我正在使用Thread.Sleep(3000),但这太笨重了,我认为这不是最好的方法

为了确保页面已从单击事件加载,您可以添加哪些内容

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));