javascript - 使用 Selenium 测试由 javascript 生成的 html

标签 javascript selenium dynamic .net-4.0 selenium-webdriver

Selenium (C#) 的新增功能。 想要自动化一些第三方页面登录。 当我在 chrome F12 >“查看元素”中手动导航时,我可以很好地看到文本框。

<input type="text" id="username" name="username" >
<input type="password" id="password" name="password" >

但是,当我“查看源代码”时,我没有看到这一点。我假设有 Javascript 代码生成此登录表单。

在 Selenium 中 - 当然,它适用于“查看源代码”版本 - 当我执行以下操作时,我得到 - 正如预期的那样“没有这样的元素”...

var x = Driver.FindElement(By.Name("username"));

Selenium 是否可以与像我这样动态生成的字段进行交互?比如告诉它“等待”或跳转到 html 的动态版本或其他内容?

最佳答案

如果目标元素不在 iframe 内,则使用 Explicit Wait应该可以解决问题:

IWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(3));
IWebElement element = wait.Until(ExpectedConditions.ElementExists(By.Id("username")));

另请参阅:Selenium c# Webdriver: Wait Until Element is Present

如果元素位于 iframe 内,您应该首先switch to it :

IWebElement frame = driver.FindElement(By.Id("my_frame_id"));
driver.SwitchTo().Frame(frame);

另请参阅:Finding nested iFrame using Selenium 2

关于javascript - 使用 Selenium 测试由 javascript 生成的 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910495/

相关文章:

html - 为什么我的 XPath 不能处理混合内容?

selenium - 使用 "new FirefoxDriver()"时,我总是得到 "NoSuchMethodError: org.apache.xpath.XPathContext"

java - Selenium在jenkins主节点上运行时出现错误 "Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms"

c# - 为什么 "dynamic"在用作泛型类型参数时对于所有类型都不是协变和逆变的?

c# - asp.net 使用 javascript 隐藏下拉列表中的特定项目

java - 如何通过反射减少IF-ELSE的使用?我可以得到代码示例吗

javascript - 命名 html 选项字段和复选框以在 jquery 中正确使用

javascript - 分配一个变量以及用另一个数组的项目迭代for循环

javascript - 为什么我不能从 onclick 属性调用名为 clear 的函数?

javascript - 如何实现 Punch Autoprefixer 预处理器?