2017-04-03 89 views
0

我正在Selenium Webdriver写一个代码。我必须点击HTML代码的按钮是Selenium添加哈希findElement

<input id="aui_3_4_0_1_300" class="aui-button-input aui-button-input-submit" type="submit">

我的代码,然后是只需遵循

driver.findElement(By.id("aui_3_4_0_1_300")).click();

但是,当我运行代码(使用Maven),我有一个信息

Unable to locate element: #aui_3_4_0_1_300

我也有这个问题,

driver.findElement(By.id("_58_login")).clear();

,也得到了Unable to locate element: #_58_login,但我认为这是有下划线的问题。 (我通过在该行之前添加synchronized(driver) {driver.wait(1000);}解决了这个问题,并且工作正常)。

为什么编译器加了散列#

+1

即唯一的建议,您通过ID定位。在CSS中通过ID定位元素是由#ID {...}完成的# – dpassy

+1

在你的dom中没有这个id的元素。 '#'没有被添加,它只是消息的一部分。 – bluehipy

+0

Ooops,复制不正确的行,发生错字;)感谢noticitng – Michal

回答

1

编译器没有为您的选择器添加任何内容"#"只是代表idCSS以及"."代表类名。

所以By.id("aui_3_4_0_1_300")相同By.cssSelector("#aui_3_4_0_1_300")

By.className("aui-button-input")相同By.cssSelector(".aui-button-input")

它似乎有一个时机发出─必需元素动态生成的,所以你需要等待,直到它出现在DOM

WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(elementToBeClickable(By.id("aui_3_4_0_1_300"))).click(); 

如果id价值"aui_3_4_0_1_300"不是恒定的,你可能需要通过匹配元patrial id值(起始字符):

wait.until(elementToBeClickable(By.cssSelector("input[id^='aui_']"))).click(); 

或只是使用另一个元件属性:

wait.until(elementToBeClickable(By.cssSelector("input[type='submit']"))).click(); 
+0

id值是不变的,所以这不是问题。我使用'driver.findElement(By.xpath(“//输入[@ type ='submit']”));''按钮和'driver.findElement(By.xpath(“// input [名= '_ 58_login']“))'。我只是好奇,为什么我收到错误消息是#。你的回答解决了我的问题,谢谢:) – Michal