我似乎无法弄清楚这一点。我尝试过使用xpath,cssselector和executeScript但没有运气。我正在尝试访问用户名和密码,但我的代码找不到它。
我是webdriver和jquery的新手
我试过的事情的子集。所有这些都找到'登录'但不是用户名或密码
WebElement username = driver.findElement("username')
WebElement username = driver.findElement(By.xpath("//div[@class='forms']//descendant::input[@name='username']"));
js.executeScript("$('div.input').get(0)");
我在xpath,cssselector中尝试了几个正则表达式。
<div class="forms">
<form name="formLogin" method="post" action="">
<div>Please sign in:</div>
<div style="height:5px"> </div>
<ul>
<li class="nameField">
<div>
<input class="hint_color" type="text" style="display: none;" value="" tabindex="1">
<input id="username" type="text" tabindex="1" title="USER.NAME" value="username" name="username" autocomplete="off">
</div>
<div style="height:5px;"> </div>
<div>
</li>
<li class="pwdField">
<div>
<input class="hint_color" type="text" style="display: none;" value="" tabindex="2">
<input id="username" type="password" title="PASSWORD" tabindex="2" value="password" name="username" autocomplete="off">
</div>
<div style="height:5px"> </div>
<div>
<div style="height:5px"> </div>
<a href="">Forgot Username/Password</a>
</div>
</li>
<li class="submitField">
<input id="login" type="submit" value="Log In" name="login">
</li>
</ul>
</form>
我们将不胜感激。
答案 0 :(得分:1)
在您的HTML代码中,您有两个标签id = username和两个标签name = username。那是错的,webdriver无法区分这些元素。
所以,如果可以,请更改这些ID(id =用户名// id =密码),但如果你不能这样做, 使用Selenium IDE记录脚本并尝试使用XPATH查找这些元素。
对不起我的英语。
答案 1 :(得分:1)
请尝试将xpath更改为
Option:1 //div[@class='forms']//descendant::input[@value='username']
Option 2: //input[@value='username']
答案 2 :(得分:0)
要对定位器,其类型以及如何以不同方式选择相同定位器进行便捷操作,您应该先使用Selenium Builder或Selenium IDE (firefox Addon)
记录您想要的事件,使用目标下拉列表下的可用方式更改定位器。这将帮助您找到确切的定位器。我希望通过这种方式,你可以弄清楚你错过了什么。
答案 3 :(得分:0)
id
和name
仅为username
。如果这是错误的,您可以尝试以下命令:
WebElement username = driver.findElement(By.id("username"));
无论您想要执行什么操作,都可以执行以下操作:
username.click();
或
username.sendKeys("abc@gmail.com");
答案 4 :(得分:0)
用于区分它们的用户名和密码元素本身没有属性,因为它们具有相同的ID和相同的类。这是糟糕的HTML编码;但即便如此,也可以解决此问题,因为li
元素具有不同的类nameField
和pwdField
。最简洁有效的方法是使用CSS选择器:
li.nameField input#username
li.pwdField input#username
使用这些定位器,webdriver代码为:
WebElement username = driver.findElement(By.cssSelector("li.nameField input#username"));
WebElement password = driver.findElement(By.cssSelector("li.pwdField input#username"));
或者如果您愿意,可以使用XPath等价物:
.//li[@class='nameField']//input[@id='username']
.//li[@class='pwdField']//input[@id='username']
P.S。所有定位器都在firefox中使用Firepath验证。
答案 5 :(得分:0)
方式,你写的是错的。
WebElement username = driver.findElement("username')
而不是试试这个:
WebElement username = driver.findElement(By.cssSelector(".nameField>div>input[id='username']"));
username.sendKeys("abcdefg");
您可以为CssSelector
定位器编写多个"username"
。
完成xpath或CssSelector
后,请使用FirePath
交叉检查您的定位器。