我正在 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);}
解决了这个问题,并且它有效)。
为什么编译器添加了哈希 #
?
最佳答案
编译器不会向您的选择器添加任何内容 - "#"
仅代表 CSS
中的 id
以及 "."
代表类名。
因此 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();
关于javascript - Selenium 将哈希添加到 findElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43179856/