【发布时间】:2020-05-19 15:46:04
【问题描述】:
我目前正在努力使用 Selenium 通过其类名来选择一个元素。 我正在使用的网站是:
http://demo.guru99.com/test/login.html
<div class="col-xs-12 col-sm-6">
<form action="success.html" method="post" id="login_form" class="box">
<h3 class="page-subheading">Already registered?</h3>
<div class="form_content clearfix">
<div class="form-group">
<label for="email">Email address</label>
<input class="is_required validate account_input form-control" data-validate="isEmail" type="text" id="email" name="email" value="">
</div>
<div class="form-group">
<label for="passwd">Password</label>
<span><input class="is_required validate account_input form-control" type="password" data-validate="isPasswd" id="passwd" name="passwd" value=""></span>
</div>
<p class="lost_password form-group"><a href="#" title="Recover your forgotten password" rel="nofollow">Forgot your password?</a></p>
<p class="submit">
<input type="hidden" class="hidden" name="back" value="my-account"> <button type="submit" id="SubmitLogin" name="SubmitLogin" class="button btn btn-default button-medium">
<span>
<i class="icon-lock left"></i>
Sign in
</span>
</button>
</p>
</div>
</form>
</div>
我想出了如何按 id 选择元素,但是每当我尝试按类名选择它时,我都会得到一个 element not found 异常。我真的不明白这是如何工作的,因为我尝试了多个网站但没有成功。在此示例中,元素具有多个类,但在某些网站上,当只有一个类时,此方法甚至会失败。在这个网站上,只有一个类可以选择它,但我读到这不是一个好方法,因为您可能会错误地选择多个元素。
IWebElement search = driver.FindElement(By.ClassName("account_input"));
这是我的代码:
driver = new ChromeDriver();
driver.Url = "http://demo.guru99.com/test/login.html";
driver.Navigate();
IWebElement search = driver.FindElement(By.ClassName("is_required.validate.account_input.form-control"));
search.SendKeys("test");
在此示例中,使用 By.Id("first_name") 方法按 Id 选择元素也不起作用:
<span>
<label class="first_name_label form_label_text"></label>
<div class="clear"></div>
<div class="form-item icon">
<input value="" data-error="An error has occured." id="first_name" type="text" name="first_name" class="form_item is_required" placeholder="First Name">
<i style="color:rgba(70,75,106,0.5)" class="vs icon-user"></i> </div>
<div class="form-item icon">
<input value="" data-error="An error has occured." id="last_name" type="text" name="last_name" class="form_item is_required" placeholder="Last Name">
<i style="color:rgba(70,75,106,0.5)" class="vs icon-user"></i> </div>
<div class="clear"></div>
</span>
我做错了什么?非常感谢您的帮助
【问题讨论】:
-
你不能使用复合类名来定位元素使用
classname。 -
嗯感谢您的反馈。我已经编辑了帖子。在第二个示例中,由于某种原因,我也无法通过 Id 选择它。我很困惑。
-
它应该与
id一起使用适当的等待。 -
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);等待10秒,由于某种原因仍然无法使用。 -
尝试使用
webdriverwait
标签: c# selenium selenium-webdriver selenium-chromedriver webautomation