在使用phantomjs和Selenium.WebDriver执行javascript时,如何看到对DOM的更改?

时间:2016-02-14 04:04:45

标签: .net selenium phantomjs

我试图用C#,phantomjs和Selenium从以下网站上删除链接。它使用从登录链接触发的登录弹出窗体。当我执行下面的代码时,弹出窗口在保存的图像中正确显示,但DOM没有在driver.PageSource行中更新。弹出窗口显示用户名和密码字段,其中用户名输入的元素ID为iptvauth_field_username。

有没有办法在触发更改DOM的javascript后获取输出的最新html?这看起来像是一件微不足道的事情,网上的所有例子都是非常基本的,并没有涵盖这一点。

这些是我的nuget包

PhantomJS版本=" 2.1.1"

phantomjs.exe version =" 1.9.2.1"

Selenium.WebDriver version =" 2.52.0"

var driver = new PhantomJSDriver();
driver.Url = "http://www.ufc.tv/";
driver.Navigate();
var source = driver.PageSource;
var loginLink = driver.FindElementByLinkText("Sign In");
loginLink.Click();

Screenshot sh = driver.GetScreenshot();         // shows popup
sh.SaveAsFile(@"d:\Temp.jpg", ImageFormat.Png);

var username = driver.FindElementById("iptvauth_field_username");   // does not exist
source = driver.PageSource;     // does not show popup in 

1 个答案:

答案 0 :(得分:0)

检查以下代码是否正常。 我已经测试了。

           var driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("http://www.ufc.tv/");
            var loginLink = driver.FindElementByLinkText("Sign In");
            loginLink.Click();

            Screenshot sh = driver.GetScreenshot();         // shows popup
            sh.SaveAsFile(@"Temp.jpg", ImageFormat.Png);

            driver.SwitchTo().Frame(driver.FindElement(By.Id("signInFrame")));
            var username = driver.FindElementById("iptvauth_field_username");   // it exist now
            var password = driver.FindElement(By.Id("iptvauth_field_password"));
            var logInButton = driver.FindElement(By.XPath(".//*[@id='iptvauth_page_login']/tbody/tr[5]/td[1]/a/span"));
            var source = driver.PageSource;     // show popup in 
            username.SendKeys("userName");
            password.SendKeys("Password");
            logInButton.Click();

如果有任何问题,请告诉我。 感谢。