【问题标题】:Write someting in a <input> tag in html with selenium c# doesn't work用硒在html中的<input>标签中写一些东西c#不起作用
【发布时间】:2021-11-13 22:25:00
【问题描述】:
我想用 html 填写来自网站的输入。
网站部分 (https://account.protonmail.com/signup?language=de) 如下所示:
<div class="flex-item-fluid">
<input autocomplete="username" autocapitalize="off" autocorrect="off" spellcheck="false" aria-invalid="false" id="username" aria-describedby="id-1" class="w100 inputform-field" value="">
</div>
这是我的 c# selenium 部分:
var elem = driver.FindElement(By.XPath("//*[@id='username']")).SendKeys("test");
// I also tried this:
var elem = driver.FindElement(By.XPath("//input[@id='username']")).SendKeys("test");
我希望有人可以帮助我。
【问题讨论】:
标签:
c#
html
selenium
automation
【解决方案1】:
用户名字段在iframe
首先使用下面的xpath 到switch to iframe,然后您可以继续使用其余代码:
//iframe[@src]
类似这样的:
IWebElement iframe = driver.FindElement(By.Xpath("//iframe[@src]"));
driver.SwitchTo().Frame(iframe);
另外,我看到用户名字段有多个元素。永远记住,我们应该优先考虑css_selector 而不是xpath
用户名字段可以用这个 css 定位:
body.color-norm.bg-norm input[id='username']
所以在代码中是这样的:
var elem = driver.FindElement(By.CssSelector("body.color-norm.bg-norm input[id='username']")).SendKeys("test");
var pass = driver.FindElement(By.CssSelector("input[id='password']")).SendKeys("password here");
【解决方案2】:
您正在查看的元素位于 iframe 中,因此请先切换框架。
iframe 的 xPath:
//iframe[contains(@src,'Name=username')]
然后使用下面的xPath找到元素,
//input[@id='username']
完成的代码:
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@src,'Name=username')]")));
var elem = driver.FindElement(By.XPath("//*[@id='username']")).SendKeys("test");
【解决方案3】:
你可以试试这个
var elem = driver.FindElement(By.CssSelector(".w100.inputform-field")).SendKeys("")
这里我们按类名搜索,而不是输入名。祝你好运。
如果它对你有用。有用的