Selenium将hash添加到findElement

时间:2017-04-03 08:27:59

标签: javascript java maven selenium

我在Selenium Webdriver中编写代码。我必须单击HTML代码的按钮

<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 个答案:

答案 0 :(得分:1)

编译器不会向您的选择器添加任何内容 - "#"仅代表id中的CSS以及"."代表类名称。

因此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"不是常数,您可能需要按照id值(起始字符)匹配元素:

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

或仅使用其他元素的属性:

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