我在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);}
来解决它并且它可以工作)。
为什么编译器添加了哈希#
?
答案 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();