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