【发布时间】:2018-08-02 12:45:36
【问题描述】:
我会使用 Selenium 和 Cromedrive 在 VisualStudio 中测试网站。 问题是我在页面上看不到由 Javascript 生成的项目。看起来 chromedriver 在 JS 运行之前获取页面源。 我在这个主题上花了 3 天时间,但它仍然没有运行。
我发现了很多建议,比如等待整个页面加载
driver.Navigate().GoToUrl("http://...");
driver.WaitForPageToLoad();
System.Threading.Thread.Sleep(20000);
或等待元素加载的不同方式
WebDriverWait waitForElement = new WebDriverWait(driver,TimeSpan.FromSeconds(5));
waitForElement.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.Id("div.list-item[userid=2]")));
我还尝试了不同的方法来执行 javascript 并获取 innerHTML
uid.GetAttribute("innerHTML");
..但没有任何帮助。
当我使用 PhantomJS 驱动程序时,我只有一个进步。它运行良好,但我需要用 chrome 对其进行测试。
看起来驱动程序以不同的方式呈现页面。
Chrome 驱动程序
<div class="list-item" on-click="{{selectUser}}" userid="{{u.id}}">
PhantomJSDriver
<div class="list-item" on-click="{{ selectUser }}" userid="2">
Chrome elemnts 与 PhantomJS 的视图相同
<div class="list-item" on-click="{{ selectUser }}" userid="2"> ==$0
您知道如何在 ChromeDriver 中获取与 Chrome 中相同的页面源吗? 谢谢。
【问题讨论】:
-
我认为您将页面源与“当前 DOM”混淆了:页面源大致是服务器交付的页面,不同浏览器的实现存在一些差异,就像您注意到 Chrome 与 PhantomJS 一样。您想要的似乎是“当前 DOM”——在应用 JS/AJAX 更改后页面现在的样子。在这里查看答案:stackoverflow.com/questions/7712771/…
标签: javascript c# selenium selenium-chromedriver