我有一些代码可以执行Selenium,但是Selenium无法更新用于定位元素的PageSource
。
driver = new ChromeDriver("D:\\chrome-driver\\75", new ChromeOptions(), TimeSpan.FromMinutes(2));
driver.Url = "https://website.com";
Thread.Sleep(10000); // Gives it time to process the internal JS
IWebElement emailTextBox = driver.FindElement(By.XPath("//*[@id='text1']"));
IWebElement passwordTextBox = driver.FindElement(By.XPath("//*[@id='text2']"));
IWebElement signUpButton = driver.FindElement(By.XPath("//*[@id='button']"));
emailTextBox.SendKeys("email");
passwordTextBox.SendKeys("password");
signUpButton.Click();
问题是Selenium仅使用下载时的页面,但实际上用户将使用部分由JavaScript渲染的网页,因此Selenium看到了例如。
<html>
Hello World
<script src="code.js"/>
</html>
实际页面(呈现后)包含所有用于登录的组件。
您会注意到,如果您尝试找到Email
TextBox来输入电子邮件,则实际上永远找不到它。 Xpath
的{{1}}是Email
。
那么,如何使Selenium知道JS所做的修改?