我目前正在努力使用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选择元素,但是每当我尝试按类名选择它时,我都会得到一个找不到元素的异常。我真的不明白这是如何工作的,因为我尝试了多个网站但没有成功。在此示例中,元素有多个类,但在某些网站上,当只有一个类时,此方法甚至失败。在这个网站上,只通过一个类选择它有效,但我读到这不是一个好方法,因为您可能会错误地选择多个元素。
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>
我做错了什么?帮助将不胜感激
你也可以使用类名来查找元素,但是问题是同一个类可以用来在程序中定义多个元素,所以当你逐个类地查找元素时,它不会保证它会找到你想要的元素。 硒将在结果中找到第一个元素。
最好与类一起使用类似 xpath 的标签。 这是代码
xpath = "//input[@name='passwd'] ";
@ -> 可用于获取标签内的任何参数并根据您的要求使用它。
这将对您有所帮助。 联系以获取更多信息。
更正的代码:您的类名的 Xpath 不正确。
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");
访问电子邮件字段的另一种方法是:
IWebElement search = driver.FindElement(By.Xpath("//*[@id='email']"));
希望这有帮助。
如果你要观察元素的类名,它是复合类名(中间有空格(。化合物类名不允许在硒中。在这种情况下,您可以使用另一个定位器,如 CSS(带有类名(或 XPath。
检查以下代码片段:
WebDriverManager.chromedriver().version("2.40").setup();
WebDriver driver= new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.get("http://demo.guru99.com/test/login.html");
WebElementuserName=driver.findElement(By.cssSelector(".is_required.validate.account_input.form-control"));
userName.sendKeys("Username");
WebElement password = driver.findElement(By.xpath("(//[@class='is_requiredvalidateaccount_input form-control'])[2]"));
password.sendKeys("Password");